2012-08-04 53 views
1

我知道如何將驗證添加到數據庫級別的SQLFORM字段。但是,我無法在個人形式的層面上找到任何有關這樣做的事情。理想情況下,我可以有一個現有的SQLFORM並且說類似:向web2py表單添加額外的驗證要求?

form.field.requires = # some extra validator 

是否有類似的情況?

回答

2

首先,請注意,即使將web2py驗證程序指定爲表定義的一部分,它也不會處於數據庫級別 - 它們始終在表單級別執行。

是SQLFORM用來建立表單字段都採取的INPUT()SELECT()TEXTAREA()幫手「要求」屬性,它可以是一個單一的驗證或驗證的名單。創建表單時,SQLFORM自動將數據庫表字段的驗證器複製到關聯的表單窗口小部件。所以,最簡單的方法是正確的創建SQLFORM之前指定數據庫表字段中的驗證:

def myform(): 
    db.mytable.myfield.requires = IS_IN_SET(['a', 'b', 'c']) 
    form = SQLFORM(db.mytable).process() 
    return dict(form=form) 

在這種情況下,將SQLFORM驗證從db.mytable.myfield複製到相關的「MyField的」窗口小部件在形式中。

您也可以直接在表格創建之後添加驗證的部件(但在被處理前):

form = SQLFORM(db.mytable) 
form.custom.widget.myfield['requires'] = IS_IN_SET(['a', 'b', 'c']) 
form.process() 

的另一種方式來訪問這個字段的控件:

form.element('input[name=myfield]')['requires'] = IS_IN_SET(['a', 'b', 'c'])