休息框架Ember和sideloading

时间:2014-11-05 13:35:21

标签: django ember.js ember-data django-rest-framework

我使用Rest Framework Ember和Django Rest Framework作为我的Ember应用程序的JSON API后端。

https://github.com/ngenworks/rest_framework_ember

我已经使用resource_name = False标志正确加载了sideloading。 以下是我的代码:

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)

这样我的工作就好了。

现在的问题是,因为我已经实现了这个并且在ModelViewSet上覆盖了list()方法,只要在POST上创建了一个新对象,我就会收到这个错误:

'NoneType' object has no attribute '__getitem__'

如果我注释掉resource_name = False,那么POST会再次按预期工作。

你知道造成这种情况的原因吗?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。我们的设置也是Ember + DRF。我找到了解决方案。

您可以像这样覆盖create方法:

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

通过这种方式,您可以在resource_name = false以外的情况下使用create来保持侧面负荷。