gpt4 book ai didi

python - 如何在 Marshmallow 中人为地嵌套模式?

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:55 27 4
gpt4 key购买 nike

在 Marshmallow 中,有没有一种方法可以将当前对象传递给 Nested 字段以生成人为嵌套的序列化?例如,考虑我正在序列化的这个对象:

example = Example(
name="Foo",
address="301 Elm Street",
city="Kalamazoo",
state="MI",
)

我想为此生成如下所示的 JSON:

{
"name": "Foo",
"address": {
"street": "301 Elm Street",
"city": "Kalamazoo",
"state": "MI"
}
}

本质上,这将是 ExampleSchema 中的嵌套 AddressSchema,如下所示:

class AddressSchema:
street = fields.String(attribute="address")
city = fields.String()
state = fields.String()

class ExampleSchema:
name = fields.String()
address = fields.Nested(AddressSchema)

...但这并不能完全满足我的要求。我可以使用自定义函数,但如果可能,我想使用内置方法。

最佳答案

我设法找到了一个解决方案,使我能够保留内省(introspection)并仅使用内置字段;不过,这有点奇怪。我修改了 ExampleSchema 以包含一个添加自引用属性的 @pre_dump Hook ,并将该字段指向该字段:

class ExampleSchema:
name = fields.String()
address = fields.Nested(
AddressSchema, attribute="_marshmallow_self_reference"
)

@pre_dump
def add_self_reference(self, data):
setattr(data, "_marshmallow_self_reference", data)

关于python - 如何在 Marshmallow 中人为地嵌套模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51951669/

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