python - 动态修改 Django Rest Framework 中的序列化器字段

标签 python django rest frameworks django-rest-framework

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

这是我的 View

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 View 集的方法 ( docs )。

关于python - 动态修改 Django Rest Framework 中的序列化器字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696403/

相关文章:

python - 在字符串中查找 "one letter that appears twice"

rest - 使用 REST 实现长时间运行的搜索的最佳实践

python - 多线程 Python 文件系统爬虫

Python:将列表中的负值设置为 0

python - 使用 Mock 时删除 call()

python - 对 modelform_factory 表单中的字段进行重新排序

django - 电子邮件作为 Django 中的用户名

python - 如何在 Django 1.7 中导出到 excel 日期时间

android - 在 android 中使用 restful web 服务处理身份验证

jquery - 来自 REST API 的自动完成