【问题标题】:Implement get_serializer in generic list view (generics.ListCreateAPIView) in Django REST Framework在 Django REST Framework 的通用列表视图 (generics.ListCreateAPIView) 中实现 get_serializer
【发布时间】:2013-07-15 08:35:21
【问题描述】:

我有一个 PageSerializer,它继承自我从文档 (http://django-rest-framework.org/api-guide/serializers.html#dynamically-modifiying-fields) 复制的 DynamicFieldsModelSerializer。为了从我的通用视图初始化序列化程序,我实现了get_serializer。对于我的详细视图(继承自 generics.RetrieveUpdateDestroyAPIView),这可以正常工作,但是当我尝试在列表视图(继承自 generics.RetrieveUpdateDestroyAPIView)中初始化我的 PageSerializer 时,我收到以下错误:

'PageList' should either include a 'serializer_class' attribute,
or use the 'model' attribute as a shortcut for automatically generating
a serializer class.

这是我的 get_serializer 实现(我在列表视图和详细视图中实现)

def get_serializer(self, instance=None, data=None, files=None, many=False, partial=False):
    fields = None
    if self.request.method == 'GET':
        query_fields = self.request.QUERY_PARAMS.get("fields", None)

        if query_fields:
            fields = tuple(query_fields.split(','))

    return PageSerializer(instance=instance, data=data, files=files, many=many, partial=partial, fields=fields) 

从错误消息来看,get_serializer 似乎并没有被使用。对于列表视图,是否有不同的方法来实现这一点?我还没有找到任何关于如何使用 get_serializer 的提示。

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    您看到的错误是因为您没有在视图上声明 serializer_classmodel 属性。如果你不指定那些你必须重写get_serializer_class()来告诉视图使用哪个序列化器。

    你也说过:

    但是当我尝试在列表视图(继承自 generics.RetrieveUpdateDestroyAPIView)中初始化我的 PageSerializer 时,我收到以下错误:

    列表视图应该继承自 ListCreateAPIView 这样的通用列表视图之一,而不是像 RetrieveUpdateDestroyAPIView 这样的单个对象视图。

    【讨论】:

      猜你喜欢
      • 2016-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多