首页 > 解决方案 > 嵌套中的Python棉花糖参数

问题描述

我一直在使用图书馆很短的时间。我一直在寻找,但我无法解决问题。

我有两个架构:

class SonSchema(Schema):
    paramter1 = fields.Str
    parameter2 = fields.Str

class FatherSchema(Schema):
    son = fields.Nested(SonSchema)

然后我有加载功能:

flag = True
schema = FatherSchema().load(response)

我需要的是取决于 SonSchema 中的参数 Flag 验证某些参数,例如如果 flag = True 则 parameter1 需要在响应中(带有@validation_schema)。

我真的不知道如何在架构实例中传递参数来获取 SonSchema。你有什么想法?

标签: pythonmarshmallow

解决方案


Jérôme 的回答是正确的,但是如果您只想使用一种模式来验证某些情况,您可以随时设置模式上下文,然后在验证方法中根据上下文中的标志检查您想要的内容:

class SonSchema(Schema):
  parameter1 = fields.Str()
  parameter2 = fields.Str()

  @validates_schema
  def validate_parameters(self, data, **kwargs):
    is_flag = self.context.get('flag', False)
    print(self.context)
    # Parameters validation based on flag

您可以为 FatherSchema 设置上下文,您将能够在子嵌套模式中使用它:

schema = FatherSchema(context={'flag': True})
data = {'son': {'parameter1': 'parameter1 value', 'parameter2': 'parameter2 value'}}
schema.load(data)

请访问扩展架构架构文档页面了解更多信息。


推荐阅读