2014-11-05 43 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保持側向負載。