2015-05-17 66 views

回答

4

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

请注意,如果您要继续使用此模式,则可以根据自己的兴趣创建属于自己的ModelViewSet类,并使用自定义list_fieldsdetail_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) 
相关问题