2015-09-14 27 views
19

我已经使用@validates装饰在sqlalchemy.orm从烧瓶中,以验证字段,并且只要以及所有字段是彼此独立的如所有已经:烧瓶验证同时装饰多个字段

@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。它看起来像只会验证接受多个参数的只会验证装饰,但是,它只会为每个参数运行验证函数一次,因为这样的:在验证field_one的工作流程

@validates('field_one', 'field_two') 
def validates_fields(self, keys, values): 
    #field validation 

结果,然后验证field_two。然而,我想同时验证两者(一个简单的例子是断言field_one的值不是field_two的值,其中一个例子是不允许field_one和field_two中的自循环指的是节点,并且它在边缘执行验证)。最好的方法是怎么做呢?

回答

9

按照它们在模型上定义的顺序排序字段。然后检查最后一个字段是否是正在验证的字段。否则,只需返回未选中的值。如果验证程序正在验证其中一个较早的字段,则其中一些将不会被设置。

@validates('field_one', 'field_two') 
def validates_fields(self, key, value): 
    if key == 'field_two': 
     assert self.field_one != value 
    return value 

请参阅this example