Rob*_*wen 2 django rest python-3.x django-rest-framework
当我定义 ModelSerializer 时,元类可用于定义要序列化的字段,它会自动继承模型中的所有字段:
class ClientSerializer(ModelSerializer):
class Meta:
model = Client
Run Code Online (Sandbox Code Playgroud)
我必须构建一个嵌套序列化器(基于 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
Run Code Online (Sandbox Code Playgroud)
问题:在这种情况下,我必须手动将所有客户端字段添加到字段元组中。我不想这样做,因为它看起来相当重复且对错误敏感。如何将“plus-1”字段(在本例中为地址)添加到使用 ModelSerialzer 时包含的默认字段???
注意:这是一个简化的示例。我有包含 40 多个字段的模型,并且必须对嵌套模型使用 SerializerMethodField,因为我必须将上下文数据(用户信息)传递给序列化器以进行我已实现的字段级身份验证。
(更新,地址是一个 SerializerMethodField,名称混淆了)
默认情况下,ModelSerializer如果fields.txt 文件中未定义参数,则返回所有模型字段Meta。
类似地,对于普通serializers.Serializer,它将返回序列化器中定义的所有字段(read-only字段除外)。
仅当您希望返回所有字段的子集时,才必须fields在类中指定。Meta
(来自 DRF 文档)
如果您只想在模型序列化器中使用默认字段的子集,则可以使用
fields或exclude选项来实现。
因此,只要不在类fields中指定参数Meta,它就应该返回所有字段。
| 归档时间: |
|
| 查看次数: |
3330 次 |
| 最近记录: |