django rest框架中ModelSerializer的不同字段设置

时间:2015-05-17 10:07:48

标签: django django-rest-framework

我有一个简单的ModelSerializer,我想对列表/细节使用不同的字段,如下所示,是否可能?

class ItemSerializer(serializers.ModelSerializer):
  class Meta:
    model = Item
    list_fields = ('id', 'name')
    detailed_fields = ('id', 'name', 'long_column')

1 个答案:

答案 0 :(得分:5)

更新:2019年5月23日

可在此处找到更好的答案:stackoverflow.com/a/44070743/225767

(感谢评论@uhbif19

原始回答:

我个人会做的是为列表与细节设置不同的序列化程序。 ModelViewSet具有retrieve()retrieve()方法。在下面的示例中,我覆盖了serializer_class方法并将super()属性设置为声明的"详细信息"串行器。当它调用list()时,我们现在使用详细序列化器。 ItemListSerializer将继续使用list_fields

另外,如果您要继续使用此模式,最好使用自定义detail_fieldsfrom rest_framework.serializers import ModelSerializer from rest_framework.viewsets import ModelViewSet class ItemListSerializer(ModelSerializer): class Meta: model = Item fields = ('id', 'name') class ItemDetailSerializer(ModelSerializer): class Meta: model = Item fields = ('id', 'name', 'long_column') class ItemViewSet(ModelViewSet): queryset = Item.objects.all() serializer_class = ItemListSerializer def retrieve(self, request, *args, **kwargs): self.serializer_class = ItemDetailSerializer return super(ItemViewSet, self).retrieve(request, *args, **kwargs) 创建自己的ModelViewSet类。

{{1}}