2

如何在django.core.serializers用于返回AJAX调用的 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'))

但这不起作用。如何传递此属性的值?

4

2 回答 2

5

看起来没有简单的方法来实现这一点,而无需子类化您自己的序列化程序,因为默认序列化程序仅通过 db 字段

于 2013-10-18T10:10:18.167 回答
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)

(基于此答案,由Tim Edgar ^发布并使用此要点进行更改)

用法:

json = JSONSerializer().serialize(modelName.objects.all(), ('attr1', 'property1', ...))
于 2013-10-18T13:29:40.070 回答