如何在web2py中验证list:string字段?

1 投票
1 回答
1048 浏览
提问于 2025-04-16 09:13

在浏览 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)

撰写回答