gpt4 book ai didi

django - 如何使用 Django Rest Framework 为列表和详细 View 设置不同的序列化器?

转载 作者:行者123 更新时间:2023-12-03 05:13:23 27 4
gpt4 key购买 nike

在使用 viewsets.ModelViewSetHyperlinkedSerializer 时,如何为列表和详细 View 设置不同的序列化器?

我知道如何通过定义 listretrive 来使用 viewsets.ViewSet 来实现这一点,( here's an example ),但我不知道知道如何优雅地使其适应 viewsets.ModelViewSet

最佳答案

我改编了“Django rest framework, use different serializers in the same 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()

在这种情况下,您只需指定两个序列化器并根据操作使用一个序列化器。但是,这可以变得更通用(对于所有操作),如下所示:

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'):
return self.action_serializers.get(self.action, self.serializer_class)

return super(MyModelViewSet, self).get_serializer_class()

关于django - 如何使用 Django Rest Framework 为列表和详细 View 设置不同的序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com