and*_*abs 16 django django-rest-framework
在使用viewsets.ModelViewSet和时,HyperlinkedSerializer如何为列表和详细信息视图设置不同的序列化程序 ?
我看到如何viewsets.ViewSet通过定义list和retrive(这是一个例子)来做到这一点,但我不知道如何优雅地适应它viewsets.ModelViewSet
bbe*_*ort 39
我已经改编了" Django rest框架,在同一个ModelViewSet中使用不同的序列化器 " 的答案,这对我很有用,我希望你会发现有用的:
class MyModelViewSet(viewsets.MyModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelListSerializer
detail_serializer_class = MyModelDetailSerializer
def get_serializer_class(self):
if self.action == 'retrieve':
if hasattr(self, 'detail_serializer_class'):
return self.detail_serializer_class
return super(MyModelViewSet, self).get_serializer_class()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您只需指定两个序列化程序并使用一个序列化程序,具体取决于操作.但是,这可以更加通用(对于所有操作)如下:
class MyModelViewSet(viewsets.MyModelViewSet):
queryset = MyModel.objects.all()
serializer_class = MyModelSerializer
action_serializers = {
'retrieve': MyModelDetailSerializer,
'list': MyModelListSerializer,
'create': MyModelCreateSerializer
}
def get_serializer_class(self):
if hasattr(self, 'action_serializers'):
if self.action in self.action_serializers:
return self.action_serializers[self.action]
return super(MyModelViewSet, self).get_serializer_class()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6944 次 |
| 最近记录: |