gpt4 book ai didi

python - 不在 ListView 中时,django rest framework 添加字段

转载 作者:太空狗 更新时间:2023-10-29 22:30:10 27 4
gpt4 key购买 nike

我正在使用 Django Rest Framework,我希望能够在返回单个对象时向序列化程序添加额外的细节,这将被排除在 ListView 之外。

在下面的代码中,我将 celery_state 字段添加到 TestModelSerializer,但我只希望在它返回单个对象时添加该字段,而不是在它返回 TestModel 数据列表时添加。

我查看了 list_serializer_class 选项,但它似乎只使用原始模型序列化程序,因此即使我尝试从那里排除,它仍将始终包含该字段。

我有哪些选择?

class TestModelSerializer(serializers.HyperlinkedModelSerializer):
celery_state = serializers.CharField(source='celery_state', read_only=True)

class Meta:
model = TestModel



class TestModelViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows TestModels to be viewed or edited.
"""
authentication_classes = (SessionAuthentication, BasicAuthentication)
permission_classes = (IsAuthenticatedOrReadOnly,)
queryset = TestModel.objects.all()
serializer_class = TestModelSerializer

最佳答案

由于序列化器类(由 View 集使用)传递许多参数,您可以使用它来控制字段输出:

class TestModelSerializer(serializers.HyperlinkedModelSerializer):
# ...

def __init__(self, *args, **kwargs):
super(TestModelSerializer, self).__init__(*args, **kwargs)
if kwargs.get('many', False):
self.fields.pop('celery_state')

关于python - 不在 ListView 中时,django rest framework 添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087746/

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