2013-10-18 128 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', ...))