2013-10-18 103 views
1

如何在使用django.core.serializers进行的JSON中添加Model的属性以返回AJAX调用?Django模型 - 在JSON中添加属性

我有一个模型:

class MyModel(models.Model): 
... 
@property 
def a_property(self): 
    return some_value; 

然后在视图中,我在一个AJAX调用发送该模型的JSON。问题是,我不知道如何发送此属性返回的值。我试过

query_set = MyModel.objects.flter(...) 
serializers.serialize('json', query_set, fields=('...', ... , 'a_property')) 

但是这不起作用。我怎样才能通过这个属性的价值?

回答

2

这JSON序列应该工作:

from StringIO import StringIO 
from django.core.serializers.json import Serializer 

class JSONSerializer(Serializer): 
    def serialize(self, queryset, attributes, **options): 
     self.options = options 
     self.stream = options.get("stream", StringIO()) 
     self.start_serialization() 
     self.first = True 

     for obj in queryset: 
      self.start_object(obj) 
      for field in attributes: 
       self.handle_field(obj, field) 
      self.end_object(obj) 
      if self.first: 
       self.first = False 
     self.end_serialization() 
     return self.getvalue() 

    def handle_field(self, obj, field): 
     self._current[field] = getattr(obj, field) 

(基于this answer,发表蒂姆·埃德加^和使用this gist改变)

用法:

json = JSONSerializer().serialize(modelName.objects.all(), ('attr1', 'property1', ...))