如何在 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
方法,并将参数分配给ParentSchema
class的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)
使用 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
方法,并将参数分配给ParentSchema
class的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)