gpt4 book ai didi

python - 如何自定义 Django Rest Framework 序列化器输出?

转载 作者:太空狗 更新时间:2023-10-29 20:39:47 25 4
gpt4 key购买 nike

我有一个像这样的 Django 模型:

class WindowsMacAddress(models.Model):
address = models.TextField(unique=True)
mapping = models.ForeignKey('imaging.WindowsMapping', related_name='macAddresses')

还有两个序列化器,定义为:

class WindowsFlatMacAddressSerializer(serializers.Serializer):
address = serializers.Field()

class WindowsCompleteMappingSerializer(serializers.Serializer):
id = serializers.Field()
macAddresses = WindowsFlatMacAddressSerializer(many=True)
clientId = serializers.Field()

通过 View 访问序列化程序时,我得到以下输出:

[
{
"id": 1,
"macAddresses": [
{
"address": "aa:aa:aa:aa:aa:aa"
},
{
"address": "bb:bb:bb:bb:bb:bb"
}
],
"clientId": null
}
]

几乎不错,除了我更喜欢:

[
{
"id": 1,
"macAddresses": [
"aa:aa:aa:aa:aa:aa",
"bb:bb:bb:bb:bb:bb"
],
"clientId": null
}
]

我怎样才能做到这一点?

最佳答案

创建一个 custom serializer field并实现 to_native 以便它返回您想要的列表。

如果您使用 source="*" technique那么这样的事情可能会起作用:

class CustomField(Field):
def to_native(self, obj):
return obj.macAddresses.all()

希望对您有所帮助。

更新 djangorestframework>=3.9.1

根据 documentation ,现在您需要覆盖 to_representation()to_internal_value() 方法中的一个或两个。示例

class CustomField(Field):
def to_representation(self, value)
return {'id': value.id, 'name': value.name}

关于python - 如何自定义 Django Rest Framework 序列化器输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18012665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com