自定义Django中的JSON序列化器
我正在处理一个Django的查询集(queryset),它给我的输出是这样的:
[{"pk": 3, "model": "appname.somemodel", "fields": {"name": "value", "name": "value" }}]
我只对字段感兴趣,所以我想要重写(override)这个序列化器。
我尝试过:
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
,发现序列化器确实有一个叫 objects
的列表,那这个问题到底是什么原因呢?
Django有没有办法在我的序列化输出中省略 pk
和 model
这两个字段呢?
1 个回答
2
在json.Serializer这个方法中,end_serialization被完全重写了,所以要理解它是怎么工作的,你需要查看这个链接 https://github.com/django/django/blob/master/django/core/serializers/json.py
。
在get_dump_object这个方法里,添加了pk和model这两个属性,所以你需要对它进行重写。
举个例子:
from django.core.serializers.json import Serializer
class JSONSerializer(Serializer):
def get_dump_object(self, obj):
return self._current or {}
带有id:
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