我试图排除嵌套序列化程序的字段。我该怎么做呢?你知道吗
例如,对于序列化程序
class UserDetailSerializer(serializers.ModelSerializer):
user = UserSerializer() # want to exclude fields in this serializer
other = OtherSerializer()
class Meta:
model = User
它应该像
serialized = UserDetailSerializer(user_detail, exclude=['fields'])
排除值应该传递给其他序列化程序,即UserSerializer和OtherSerializer。你知道吗
我在drf文档中有一个dynamicFieldModelSerializer的修改版本,但它只适用于从它继承的类。你知道吗
class DynamicFieldsModelSerializer(serializers.ModelSerializer):
"""
A ModelSerializer that takes an additional `fields` argument that
controls which fields should be displayed.
"""
def __init__(self, *args, **kwargs):
# Don't pass the 'fields' arg up to the superclass
fields = kwargs.pop('fields', None)
exclude = kwargs.pop('exclude', None)
# Instantiate the superclass normally
super().__init__(*args, **kwargs)
if fields is not None:
# 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)
elif exclude is not None:
# drop fields that are specified in the 'exclude' argument
for field_name in set(exclude):
self.fields.pop(field_name)
好吧,我在这里找到了解决办法: https://stackoverflow.com/a/37186932/10531996
以下是支持多值字段的编辑版本:
用法:
相关问题 更多 >
编程相关推荐