当前位置: 首页 > 面试题库 >

在Python类中序列化@property方法

薄涵衍
2023-03-14
问题内容

序列化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大小写)。去做)。



 类似资料:
  • 我也读 类、函数和方法不能pickle--如果您pickle,则对象的类不pickle,只是标识它属于什么类的字符串。 那么,这是否意味着这些类不能被序列化? 现在它是如何最终被称为 引发异常的

  • 本文向大家介绍Python 类,property属性(简化属性的操作),@property,property()用法示例,包括了Python 类,property属性(简化属性的操作),@property,property()用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python 类,property属性(简化属性的操作),@property,property()用法。分享给

  • 问题内容: 我有一个带有两个类方法的类(使用函数),用于获取和设置本质上是静态变量的东西。我试图将函数与这些函数一起使用,但会导致错误。我能够在解释器中使用以下代码重现该错误: 我可以演示类方法,但是它们不能用作属性: 是否可以将property()函数与类方法修饰的函数一起使用? 问题答案: 属性是在类上创建的,但会影响实例。因此,如果要使用属性,请在元类上创建该属性。 但是由于无论如何都使用元

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?

  • 本文向大家介绍如何在Python中创建可序列化的JSON类?,包括了如何在Python中创建可序列化的JSON类?的使用技巧和注意事项,需要的朋友参考一下 序列化是将复杂数据类型的对象转换为本地数据类型的过程,以便可以轻松地将它们转换为JSON表示法。  如果您有JSON字符串,则可以使用json.dumps()方法将其转换为JSON字符串。 Python pickle模块用于对Python对象结

  • 本文向大家介绍Python pickle类库介绍(对象序列化和反序列化),包括了Python pickle类库介绍(对象序列化和反序列化)的使用技巧和注意事项,需要的朋友参考一下 一、pickle pickle模块用来实现python对象的序列化和反序列化。通常地pickle将python对象序列化为二进制流或文件。   python对象与文件之间的序列化和反序列化: 如果要实现python对象和