如何在web2py中验证list:string字段?
在浏览 gluon.validators
的时候,我发现了 IS_LIST_OF()
这个东西,于是我尝试把它加到我的模型里:
db.define_table("emails_list",
Field("recipients", "list:string", requires=IS_LIST_OF(IS_EMAIL(
error_message="Invalid email")))
)
我确认收件人已经正确地添加到数据库里(顺便说一下,我是用 SQLFORM
),但是验证就是没有发生。
1 个回答
3
通过调试,我发现一些原因导致列表类型的字段中的验证器被去掉了。这应该是个错误。你可以通过使用表单的 onvalidation 属性来解决这个问题。下面是一个例子:
在你的模型中:
def validate_email(form):
for eml in form.vars.recipients:
out,ers = IS_EMAIL()(eml)
if ers:
form.errors.receipients = ers
db.define_table("emaillist",
Field("recipients", "list:string"))
在你的控制器中:
def listtest():
form = SQLFORM(db.emaillist)
if form.accepts(request.vars,session,
onvalidation=validate_email):
response.flash = "Got it"
else:
response.flash = form.errors
return dict(form=form)