gpt4 book ai didi

python - 序列化 Python 类中的 @property 方法

转载 作者:太空狗 更新时间:2023-10-29 16:53:36 26 4
gpt4 key购买 nike

在序列化 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 序列化程序更多工作(除了更改基类来做到这一点)。

关于python - 序列化 Python 类中的 @property 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com