如何在 Marshmallow 模式中传递参数

How to pass a parameter in a Marshmallow schema

使用 Python、Flask 和棉花糖,如果我有架构:

class ParentSchema(Schema):
    id = fields.Int(dump_only=True)
    children = fields.Nested('ChildSchema', dump_only=True)

和一个 class Parent 有一个方法:

class Parent():
    getChildren(self, params):
        pass

如何让 Marshmallow 在序列化对象时将必要的参数传递给 Parent.getChildren,然后用结果填充 ParentSchema.children

所以解决方案是在模式class中添加一个get_attribute方法,并将参数分配给ParentSchemaclass的context属性].这改变了 Marshmallow 在构建模式时用于提取 class 属性的默认行为。

class ParentSchema(Schema):
    id = fields.Int(dump_only=True)
    children = fields.Nested('ChildSchema', dump_only=True)

    def get_attribute(self, key, obj, default):
        if key == 'children':
            return obj.getChildren(self.context['params'])
        else:
            return getattr(obj, key, default)