gpt4 book ai didi

django - django rest 框架中 ModelSerializer 的不同字段设置

转载 作者:行者123 更新时间:2023-12-04 19:57:10 26 4
gpt4 key购买 nike

我有一个简单的 ModelSerializer,我想对列表/详细信息使用不同的字段,如下所示,这可能吗?

class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
list_fields = ('id', 'name')
detailed_fields = ('id', 'name', 'long_column')

最佳答案

更新:2019 年 5 月 23 日

可以在这里找到更好的答案:stackoverflow.com/a/44070743/225767

(感谢评论 @uhbif19 )

原答案:

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

附带说明一下,如果您打算继续使用此模式,使用自定义 list_fieldsdetail_fields 创建您自己的 ModelViewSet 类可能符合您的最大利益。

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)

关于django - django rest 框架中 ModelSerializer 的不同字段设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30285710/

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