在 Django 中自定义 JSON 序列化程序
Posted
技术标签:
【中文标题】在 Django 中自定义 JSON 序列化程序【英文标题】:Customize JSON serializer in Django 【发布时间】:2014-10-31 10:59:31 【问题描述】:我正在序列化一个 Django 查询集,它给我一个类似的输出
["pk": 3, "model": "appname.somemodel", "fields": "name": "value", "name": "value" ]
我只对领域感兴趣。所以我试图覆盖序列化程序。
我试过了
from django.core.serializers.json import Serializer
class JSONSerializer(Serializer):
def end_serialization(self):
for i, obj in enumerate(self.objects):
self.objects[i] = obj.get('fields', )
return super(JSONSerializer, self).end_serialization()
但我得到一个属性错误:
'JSONSerializer' object has no attribute 'objects'
我检查了https://github.com/django/django/blob/master/django/core/serializers/python.py
并且Serializer 确实有一个名为objects
的列表,那么是什么导致了这个问题?
Django 有没有办法从我的序列化输出中省略 pk
和 model
?
【问题讨论】:
【参考方案1】:在 json.Serializer 方法中 end_serialization 完全被覆盖,因此要了解它是如何工作的,您需要查看 https://github.com/django/django/blob/master/django/core/serializers/json.py
。
属性pk和模型添加到get_dump_object方法中,所以你需要重写它。
例如:
from django.core.serializers.json import Serializer
class JSONSerializer(Serializer):
def get_dump_object(self, obj):
return self._current or
带身份证:
class JSONSerializer(Serializer):
def get_dump_object(self, obj):
dump_object = self._current or
dump_object.update('pk': smart_text(obj._get_pk_val(), strings_only=True))
return dump_object
【讨论】:
谢谢!它完成了这项工作。但是为什么列表中省略了id
/pk
?我什至尝试过JSONSerializer().serialize(self.get_queryset(), fields=('id','pk',))
,但它不会打印 id。
太棒了。谢谢!但它不会序列化我的注释字段。这似乎很奇怪。它们在查询集中。以上是关于在 Django 中自定义 JSON 序列化程序的主要内容,如果未能解决你的问题,请参考以下文章
在 Django Rest Framework GET 调用中自定义 JSON 输出