我一直在使用来自flask 的sqlalchemy.orm 中的@validates 装饰器来验证字段,只要所有字段相互独立,一切都会顺利进行,例如:
@validates('field_one')
def validates_field_one(self, key, value):
#field one validation
@validates('field_two')
def validates_field_two(self, key, value):
#field two validation
但是,现在我需要进行一些验证,需要同时访问 field_one 和 field_two。看起来 validates 接受 validates 装饰器的多个参数,但是,它只会为每个参数运行一次验证函数,如下所示:
@validates('field_one', 'field_two')
def validates_fields(self, keys, values):
#field validation
导致验证 field_one 然后验证 field_two 的工作流程。但是,我想同时验证两者(一个简单的例子是断言 field_one 的值不是 field_two 的值,其中一个例子是在 field_one 和 field_two 的图中不允许自循环指节点,它正在边缘上执行验证)。这样做的最佳方法是什么?
最佳答案
按照在模型上定义的顺序对字段进行排序。然后检查最后一个字段是否是正在验证的字段。否则只返回未选中的值。如果验证器正在验证较早的字段之一,则其中一些字段尚未设置。
@validates('field_one', 'field_two')
def validates_fields(self, key, value):
if key == 'field_two':
assert self.field_one != value
return value
见 this example .
关于python - Flask 同时验证装饰器多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32555829/