我正在序列化一个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
?
答案 0 :(得分: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