我会亲自做的是什么有列表与细节不同的串行器。 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)