2014-09-06 88 views
0

我序列化的Django的queryset这使我像自定义JSON序列在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和串行确实有一个叫objects那么是什么原因造成这个问题清单?

Django有没有办法从我的序列化输出中省略pkmodel

回答

2

在json.Serializer方法end_serialization完全覆盖,所以要了解它如何工作,你需要看到这https://github.com/django/django/blob/master/django/core/serializers/json.py

属性pk和model添加到方法get_dump_object中,因此您需要重写它。

例如:

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 
+0

谢谢!它完成了这项工作。但为什么从列表中省略'id' /'pk'?我甚至尝试过'JSONSerializer()。serialize(self.get_queryset(),fields =('id','pk',))'但它不会打印id。 – Jamgreen 2014-09-06 20:37:40

+0

你应该单独插入它。我更新了我的例子。 – 2014-09-06 21:14:31

+0

太好了。谢谢!但它不会序列化我的注释字段。这似乎很奇怪。它们在查询集中。 – Jamgreen 2014-09-07 07:38:19