3 回答

TA貢獻1827條經驗 獲得超8個贊
覆蓋您的get_serializer_class方法。您的模型mixins中使用此方法來檢索適當的Serializer類。
請注意,還有一種get_serializer方法可以返回正確的Serializer 的實例
class DualSerializerViewSet(viewsets.ModelViewSet):
def get_serializer_class(self):
if self.action == 'list':
return serializers.ListaGruppi
if self.action == 'retrieve':
return serializers.DettaglioGruppi
return serializers.Default # I dont' know what you want for create/destroy/update.

TA貢獻1877條經驗 獲得超6個贊
您可能會發現此mixin有用,它覆蓋了get_serializer_class方法,并允許您聲明一個將操作和序列化程序類或后備映射到常規行為的字典。
class MultiSerializerViewSetMixin(object):
def get_serializer_class(self):
"""
Look for serializer class in self.serializer_action_classes, which
should be a dict mapping action name (key) to serializer class (value),
i.e.:
class MyViewSet(MultiSerializerViewSetMixin, ViewSet):
serializer_class = MyDefaultSerializer
serializer_action_classes = {
'list': MyListSerializer,
'my_action': MyActionSerializer,
}
@action
def my_action:
...
If there's no entry for that action then just fallback to the regular
get_serializer_class lookup: self.serializer_class, DefaultSerializer.
"""
try:
return self.serializer_action_classes[self.action]
except (KeyError, AttributeError):
return super(MultiSerializerViewSetMixin, self).get_serializer_class()
- 3 回答
- 0 關注
- 1587 瀏覽
添加回答
舉報