自动将所有模型字段添加到 django rest 序列化程序
Automatically add all model fields to django rest serializer
当我定义 ModelSerializer 时,meta class 可用于定义要序列化的字段,它会自动继承模型中的所有字段:
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
问题:在这种情况下,我必须手动将 所有 客户端字段添加到字段元组中。我不想这样做,因为它看起来很重复并且对错误敏感。我如何将 "plus-1" 字段(在本例中为地址)添加到使用 ModelSerialzer 时包含的默认字段???
注意:这是一个简化的示例。我的模型有 40 多个字段,我必须对嵌套模型使用 SerializerMethodField,因为我必须将上下文数据(用户信息)传递给序列化程序以实现我已经实现的字段级身份验证。
(更新,地址是一个SerializerMethodField,名字搞混了)
默认情况下,如果 Meta
中未定义 fields
参数,则 ModelSerializer
return 的所有模型字段。
类似地,对于正常的 serializers.Serializer
,它将 return 序列化程序中定义的所有字段(read-only
字段除外)。
仅当您希望 return 编辑所有字段的子集时,才必须在 Meta
class 中指定 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
or exclude
options.
所以不要在 Meta
class 中指定 fields
参数,它应该 return 所有字段。
您需要的是模型中的字段列表。可在 model._meta.fields
内到达。此时,如果字段 address
不是模型的一部分,您可以添加它。
更好的是,在 django 1.8 中,您可以使用 model.get_fields。 doc
当我定义 ModelSerializer 时,meta class 可用于定义要序列化的字段,它会自动继承模型中的所有字段:
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
问题:在这种情况下,我必须手动将 所有 客户端字段添加到字段元组中。我不想这样做,因为它看起来很重复并且对错误敏感。我如何将 "plus-1" 字段(在本例中为地址)添加到使用 ModelSerialzer 时包含的默认字段???
注意:这是一个简化的示例。我的模型有 40 多个字段,我必须对嵌套模型使用 SerializerMethodField,因为我必须将上下文数据(用户信息)传递给序列化程序以实现我已经实现的字段级身份验证。
(更新,地址是一个SerializerMethodField,名字搞混了)
默认情况下,如果 Meta
中未定义 fields
参数,则 ModelSerializer
return 的所有模型字段。
类似地,对于正常的 serializers.Serializer
,它将 return 序列化程序中定义的所有字段(read-only
字段除外)。
仅当您希望 return 编辑所有字段的子集时,才必须在 Meta
class 中指定 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
class 中指定 fields
参数,它应该 return 所有字段。
您需要的是模型中的字段列表。可在 model._meta.fields
内到达。此时,如果字段 address
不是模型的一部分,您可以添加它。
更好的是,在 django 1.8 中,您可以使用 model.get_fields。 doc