2015-05-17 104 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) 
相關問題