Zac
Zac

Reputation: 481

Rest Framework Ember and sideloading

I am using Rest Framework Ember along with Django Rest Framework as my JSON API backend for my Ember application.

https://github.com/ngenworks/rest_framework_ember

I have gotten sideloading to work correctly with the resource_name = False flag. Here is my code below:

class DocumentViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows documents to be viewed or edited.
    """

    queryset = Document.objects.all()
    serializer_class = DocumentSerializer

    # Side loading code for documents
    resource_name = False
    # renderer_classes = (JSONRenderer, BrowsableAPIRenderer)

    def list(self, request, *args, **kwargs):
        # import IPython
        # IPython.embed()
        data = {'document': []}
        for doc in self.get_queryset():
            data['document'].append(doc)
            data['contacts'] = doc.contacts.all()

        serializer = DocumentContactSerializer(data)

        return Response(serializer.data)

This works as I'd like it to work.

The problem now is that since I've implemented this and overwritten the list() method on the ModelViewSet whenever a new object is created on a POST I am getting this error:

'NoneType' object has no attribute '__getitem__'

If I comment out the resource_name = False then POST works as expected again.

Would you know what could be causing this?

Upvotes: 3

Views: 619

Answers (1)

LShi
LShi

Reputation: 1502

I just ran into the very same problem. Our set-up is also Ember + DRF. And I have found a solution.

You could override the create method like this:

def create(self, request):
    self.resource_name = 'document'
    data = request.DATA # returns the right querydict now
    # do what you want

In this way, you're keeping the side load by using resource_name = false in cases other than create.

Upvotes: 2

Related Questions