我使用图书馆已有很短的时间了。我一直在搜索,但无法解决问题。
我有两个模式:
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,则参数1需要在响应中(带有@validation_schema)。
我真的不知道如何在架构实例中传递参数来获取SonSchema。你有什么想法吗?
答案 0 :(得分:0)
根据flag
,使用不同的架构可能会更好。您可以使用继承来减少重复。
class SonSchema(Schema):
paramter1 = fields.Str
parameter2 = fields.Str
class FatherSchema(Schema):
son = fields.Nested(SonSchema)
class ValidatedSonSchema(SonSchema):
@validates_schema
def validation_method(self, data, kwargs):
...
class ValidatedFatherSchema(FatherSchema):
son = fields.Nested(ValidatedSonSchema)
flag = True
schema = ValidateFatherSchema if flag else FatherSchema
result = schema().load(response)
答案 1 :(得分:0)
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)
请访问Extending Schemas和Schema文档页面以获取更多信息。