我按如下方式定义了一个表:
db.define_table('special_users',
Field('sp_user', db.auth_user, required=True, notnull=True, label='Special User', represent=lambda lead,row: lead.first_name + ' ' + lead.last_name, unique=True),
format=lambda row: (row.lead.first_name + ' ' + row.lead.last_name) or 'N/A')
我指定了需求约束如下
db.special_users.lead.requires = IS_IN_DB(db, db.auth_user, '%(first_name)s %(last_name)s', zero=None)
现在,当我使用SQLFORM(db.special_users)
为表格生成表单时,它允许我根据需要多次添加用户,这违反了unique=True
约束。我怎样才能纠正这个问题?
答案 0 :(得分:0)
出于某种原因,我认为可能不是空的,并且唯一的约束不会应用于参考字段。在任何情况下,如果插入通常是通过表单进行的,那么最好在字段上使用IS_NOT_IN_DB()
验证器,因为这样可以在处理表单时启用正确的错误处理和显示。仅依赖unique=True
将导致重复插入尝试时出现异常,这将为最终用户生成非特定的500服务器错误。