在序列化 Django 模型类时,有没有办法将任何 @property 定义传递到 json 序列化器?
example:
class FooBar(object.Model)
name = models.CharField(...)
@property
def foo(self):
return "My name is %s" %self.name
想要序列化为:
[{
'name' : 'Test User',
'foo' : 'My name is Test User',
},]
您可以扩展 Django 的序列化程序,而无需做太多工作。这是一个自定义序列化程序,它接受查询集和属性列表(字段或非字段),并返回 JSON。
from StringIO import StringIO
from django.core.serializers.json import Serializer
class MySerializer(Serializer):
def serialize(self, queryset, list_of_attributes, **options):
self.options = options
self.stream = options.get("stream", StringIO())
self.start_serialization()
for obj in queryset:
self.start_object(obj)
for field in list_of_attributes:
self.handle_field(obj, field)
self.end_object(obj)
self.end_serialization()
return self.getvalue()
def handle_field(self, obj, field):
self._current[field] = getattr(obj, field)
Usage:
>>> MySerializer().serialize(MyModel.objects.all(), ["field1", "property2", ...])
当然,这可能比编写您自己的更简单的 JSON 序列化器需要更多的工作,但可能不会比您自己的 XML 序列化器做更多的工作(除了将基类更改为去做)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)