序列化Django模型类时,是否可以将任何@property定义传递给json序列化器?
例:
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)
用法:
>>> MySerializer().serialize(MyModel.objects.all(), ["field1", "property2", ...])
当然,这可能比编写你自己的更简单的JSON序列化程序要多,但可能不比你自己的XML序列化程序要多(除了将基类更改为XML,还必须重新定义“ handle_field”以匹配XML大小写)。去做)。