【问题标题】:Dynamically modifying serializer fields in Django Rest Framework在 Django Rest Framework 中动态修改序列化器字段
【发布时间】:2013-09-12 20:01:03
【问题描述】:

我正在尝试使用 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

【问题讨论】:

标签: python django rest frameworks django-rest-framework


【解决方案1】:

请注意,您将serializer_class 设置为不是类,而是类的一个实例。您要么需要将dropfields 设置为类的属性,(就像在您链接到的文档示例中对fields 所做的那样),或者您需要查看覆盖视图集的get_serializer 方法(@987654321 @)。

【讨论】:

  • 我知道serializer_class 不是一个类,但我无法理解这个答案,因为链接似乎已经过时了。你能更新链接吗?或举例说明所发布的问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 1970-01-01
  • 2017-08-26
  • 2015-12-19
  • 2013-07-07
  • 1970-01-01
  • 2015-02-19
相关资源
最近更新 更多