当不在列表视图中时,django rest框架添加字段

joe*_*ler 6 python django django-rest-framework

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

在下面的代码中,我将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
Run Code Online (Sandbox Code Playgroud)

mar*_*dev 4

由于序列化器类(由视图集使用)传递many参数,因此您可以使用它来控制字段输出:

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')
Run Code Online (Sandbox Code Playgroud)