如何自定义Django Rest Framework序列化器输出? [英] How can one customize Django Rest Framework serializers output?
本文介绍了如何自定义Django Rest Framework序列化器输出?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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()
当通过视图访问序列化程序时,我得到以下输出:
[
{
id:1,
macAddresses :[
{
地址: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
}
]
如何实现?
解决方案
创建自定义序列化程序字段并实现 to_native
,以便它返回您想要的列表。
如果您使用 source =*
技术,那么这样的事情可能会起作用:
class CustomField(Field):
pre>
def to_native(self,obj):
return obj.macAddresses.all()
我希望有所帮助。
I have a Django model that is like this:
class WindowsMacAddress(models.Model): address = models.TextField(unique=True) mapping = models.ForeignKey('imaging.WindowsMapping', related_name='macAddresses')
And two serializers, defined as:
class WindowsFlatMacAddressSerializer(serializers.Serializer): address = serializers.Field() class WindowsCompleteMappingSerializer(serializers.Serializer): id = serializers.Field() macAddresses = WindowsFlatMacAddressSerializer(many=True) clientId = serializers.Field()
When accessing the serializer over a view, I get the following output:
[ { "id": 1, "macAddresses": [ { "address": "aa:aa:aa:aa:aa:aa" }, { "address": "bb:bb:bb:bb:bb:bb" } ], "clientId": null } ]
Almost good, except that I'd prefer to have:
[ { "id": 1, "macAddresses": [ "aa:aa:aa:aa:aa:aa", "bb:bb:bb:bb:bb:bb" ], "clientId": null } ]
How can I achieve that ?
解决方案Create a custom serializer field and implement
to_native
so that it returns the list you want.If you use the
source="*"
technique then something like this might work:class CustomField(Field): def to_native(self, obj): return obj.macAddresses.all()
I hope that helps.
这篇关于如何自定义Django Rest Framework序列化器输出?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文