我會親自做的是什麼有列表與細節不同的串行器。 ModelViewSet有一個list()
和retrieve()
方法。在下面的示例中,我覆蓋了retrieve()
方法並將serializer_class
屬性設置爲聲明的「詳細」序列化程序。當它調用super()
時,我們現在使用詳細的序列化程序。 list()
將繼續使用ItemListSerializer
。
請注意,如果您要繼續使用此模式,則可以根據自己的興趣創建屬於自己的ModelViewSet類,並使用自定義list_fields
和detail_fields
。
from 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)