【问题标题】:Rest Framework Ember and sideloadingRest Framework Ember 和侧载
【发布时间】:2015-01-14 19:11:06
【问题描述】:

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

https://github.com/ngenworks/rest_framework_ember

我已经让侧载与 resource_name = False 标志一起正常工作。 下面是我的代码:

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 将再次按预期工作。

你知道是什么原因造成的吗?

【问题讨论】:

  • 简洁的解决方案。您使用的是什么版本的 DRF?我希望自己实现这一点。

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


【解决方案1】:

我刚刚遇到了同样的问题。我们的设置也是 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 来保持侧向负载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2015-10-05
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多