动态修改Django Rest Fram中的序列化器字段

2024-05-19 14:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用django rest框架文档中描述的高级序列化器用法。http://django-rest-framework.org/api-guide/serializers.html#advanced-serializer-usage动态修改序列化程序字段

这是我的序列化程序类:

class MovieSerializer(serializers.ModelSerializer):
    moviework_work = MovieWorkSerializer(many=True) 

    def __init__(self, *args, **kwargs):
        # Don't pass the 'fields' arg up to the superclass
        dropfields = kwargs.pop('dropfields', None)

        # Instantiate the superclass normally
        super(MovieSerializer, self).__init__(*args, **kwargs)

        if dropfields:
            # Drop fields specified in the `fields` argument.
            banished = set(dropfields)
            for field_name in banished:
                self.fields.pop(field_name)
    class Meta:
        model = Movie
        fields = ('field1','field2','moviework_work')

这是我的视图集

class MovieFromInterpreterViewSet(viewsets.ModelViewSet):
    queryset = Movie.objects.all()
    serializer_class = MovieSerializer(dropfields=('moviework_work',))

我得到这个错误:

TypeError: 'MovieSerializer' object is not callable

Tags: thedjangoself程序restfields序列化kwargs
1条回答
网友
1楼 · 发布于 2024-05-19 14:13:33

注意,您设置的serializer_class不是类,而是类的实例。您要么需要将dropfields设置为类的属性(就像链接到的文档示例中的fields那样),要么需要查看是否重写viewset(docs)的get_serializer方法。

相关问题 更多 >