2015-09-14 56 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