我使用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会再次按预期工作。
你知道造成这种情况的原因吗?
答案 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
来保持侧面负荷。