我知道如何在数据库级别向SQLFORM字段添加验证。但是,我找不到任何关于在个人表格层面上这样做的事情。理想情况下,我可以拥有一个现有的SQLFORM并说出类似的内容:
form.field.requires = # some extra validator
有这样的东西吗?
答案 0 :(得分:2)
首先,请注意,web2py验证程序永远不会处于数据库级别,即使指定为表定义的一部分 - 它们也始终在表单级别强制执行。
SQLFORM用于构建表单字段的INPUT()
,SELECT()
和TEXTAREA()
帮助程序都采用“requires”属性,该属性可以是单个验证程序或验证程序列表。在创建表单时,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'])