2014-11-05 41 views
3

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

https://github.com/ngenworks/rest_framework_ember

我已经得到了侧面加载与RESOURCE_NAME =假的标志正常工作。 这里是我的代码如下:

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) 

这工作,因为我希望它的工作。

现在的问题是,因为我实现了这一点,只要在POST我收到此错误创建一个新的对象覆盖在ModelViewSet名单()方法:

'NoneType' object has no attribute '__getitem__' 

如果我评论out resource_name = False,然后POST按预期工作。

你知道这是什么原因吗?

+0

整洁的解决方案。你使用什么版本的DRF?我正在寻找自己来实现这一点。 – dustinfarris 2014-11-16 05:00:36

回答

2

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

您可以覆盖create方法是这样的:

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

这样,你在比create其他情况下使用resource_name = false保持侧向负载。