当我定义 ModelSerializer 时,元类可用于定义要序列化的字段,它会自动继承模型中的所有字段:
class ClientSerializer(ModelSerializer):
class Meta:
model = Client
我必须构建一个嵌套的序列化程序(基于 SerializerMethodField)。所以我必须定义要包含的字段:
class ClientSerializer(ModelSerializer)
address = SerializerMethodField('get_client_addresses')
class Meta:
model = Client
fields = ('address','name','city', <etc*>)
def get_client_addresses(self, obj):
addresses = Addresses.objects.all().filter(parent=obj)
serializer = AddressSerializer(addresses, many=True,
context={'request', self.context.get('request') })
return serializer.data
问题:在这种情况下,我必须手动将所有 客户端字段添加到字段元组中。我不想这样做,因为它看起来很重复并且对错误敏感。我如何向使用 ModelSerialzer 时包含的默认字段添加“加 1”字段(在本例中为地址)???
注意:这是一个简化的例子。我的模型有 40 多个字段,我必须对嵌套模型使用 SerializerMethodField,因为我必须将上下文数据(用户信息)传递到序列化程序以实现我已实现的字段级身份验证。
(更新,地址是一个SerializerMethodField,名字搞混了)
最佳答案
默认情况下,如果 Meta
中未定义 fields
参数,则 ModelSerializer
返回所有模型字段。
与普通的serializers.Serializer
类似,它将返回序列化器中定义的所有字段(只读
字段除外)。
仅当您希望返回所有字段的子集时,才必须在 Meta
类中指定 fields
。
(来自 DRF 文档)
If you only want a subset of the default fields to be used in a model serializer, you can do so using
fields
orexclude
options.
所以不要在您的 Meta
类中指定 fields
参数,它应该返回所有字段。
关于django - 自动将所有模型字段添加到 django rest 序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727382/