你可以覆盖序列化
__init__方法,并
fields根据查询参数动态设置属性。你可以在
request整个上下文中访问对象,并将其传递给序列化程序。
这是此问题的Django Rest framework文档示例的复制和粘贴:
from rest_framework import serializersclass DynamicFieldsModelSerializer(serializers.ModelSerializer): """ A ModelSerializer that takes an additional `fields` argument that controls which fields should be displayed. """ def __init__(self, *args, **kwargs): # Instantiate the superclass normally super(DynamicFieldsModelSerializer, self).__init__(*args, **kwargs) fields = self.context['request'].query_params.get('fields') if fields: fields = fields.split(',') # Drop any fields that are not specified in the `fields` argument. allowed = set(fields) existing = set(self.fields.keys()) for field_name in existing - allowed: self.fields.pop(field_name)class UserSerializer(DynamicFieldsModelSerializer, serializers.HyperlinkedModelSerializer): class meta: model = User fields = ('url', 'username', 'email')


