在棉花糖中,是否有一种方法可以将当前对象传递到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"
}
}
本质上,这将是AddressSchema
内的嵌套ExampleSchema
,如下所示:
class AddressSchema:
street = fields.String(attribute="address")
city = fields.String()
state = fields.String()
class ExampleSchema:
name = fields.String()
address = fields.Nested(AddressSchema)
...但是那并不能完全满足我的要求。我可以使用自定义函数,但如果可能的话,我想使用内置方法。
答案 0 :(得分:1)
我设法找到一种解决方案,使我能够保留内省并只使用内置字段;不过有点奇怪。我对ExampleSchema
进行了修改,使其包含一个@pre_load
钩子,该钩子添加了一个自指属性,并指向该字段:
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)