在Django REST Framework中的通用列表视图(generics.ListCreateAPIView)中实现get_serializer

时间:2013-07-15 08:35:22

标签: django django-rest-framework

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

'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的任何提示。

1 个答案:

答案 0 :(得分:1)

您看到的错误是因为您未在视图中声明serializer_classmodel属性。如果您没有指定那些,则必须覆盖get_serializer_class()以告知视图使用哪个序列化程序。

你也说过:

  

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

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