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