web2py-sqlform无法检查unique =与require = IS_LENGTH()一起使用的真

时间:2019-07-06 09:15:08

标签: python-3.x sqlite web2py

当数据具有相同的值时,

sqlform不显示错误消息,然后出现错误 error1 detail ps。我的目标是创建一个包含13个数字的字段,该数字与其他数字不同

我尝试删除require == IS_LENGTH(maxsize = 13,minsize = 13)然后sqlform工作正常,但是我无法检查其中哪个字符串等于13的这些方法

db.define_table('person',
Field('h_id_card',unique=True,requires=IS_LENGTH(maxsize=13,minsize=13))
)
def add():
form = SQLFORM(db.person).process()
    return locals()

我希望sqlform将显示​​错误消息,而不是被接受

this is what i expect

1 个答案:

答案 0 :(得分:1)

来自book

  

请注意,requires=...是在表单级别强制执行的,required=True是在DAL(插入)级别强制执行的,而notnullunique和{{ 1}}在数据库级别强制执行。尽管有时看起来有些多余,但在使用DAL进行编程时,必须保持区别。

因为ondelete转换为unique=True SQL语句,所以当插入/更新违反唯一性约束时,您只是从数据库中得到一个错误,从而在数据库驱动程序中生成异常,最终如果您未捕获,则会在您的应用代码中生成异常。

如果您想针对唯一性要求启用表单验证,则应使用IS_NOT_IN_DB validator

UNIQUE