动态修改Django Rest Framework中的序列化程序字段 [英] Dynamically modifying serializer fields in Django Rest Framework

查看:690
本文介绍了动态修改Django Rest Framework中的序列化程序字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to use the Advanced serializer usage described in the django rest framework documentation. http://django-rest-framework.org/api-guide/serializers.html#advanced-serializer-usage to dynamically modifying serializer field

这是我的序列化器类:

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')

这是我的视图>

Here is my viewset

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

我收到这个错误:

TypeError: 'MovieSerializer' object is not callable


推荐答案

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

Note that you are setting serializer_class not to a class, but to an instance of the class. You either need to set dropfields as an attribute on the class, (just like it does for fields in the documented example you link to) or you need to look at overriding the get_serializer method of the viewset (docs).

这篇关于动态修改Django Rest Framework中的序列化程序字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆