在 Python 类中序列化 @property 方法

2024-03-11

在序列化 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(使用前将#替换为@)

在 Python 类中序列化 @property 方法 的相关文章

随机推荐