如何在Marshmallow模式中传递参数

时间:2016-10-06 13:44:48

标签: flask-restful marshmallow

使用Python,Flask和marshmallow,如果我有一个架构:

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

和一个类Parent,它有一个方法:

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

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

1 个答案:

答案 0 :(得分:2)

因此,解决方案是向架构类添加get_attribute方法,并将参数分配给context类的ParentSchema属性。这改变了Marshmallow在构建模式时用于提取类属性的默认行为。

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)