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)
由于序列化器类(由视图集使用)传递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)