在web2py中使用IS_IN_DB指定时,不遵守唯一约束

时间:2012-12-06 07:19:29

标签: data-access-layer web2py

我按如下方式定义了一个表:

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约束。我怎样才能纠正这个问题?

1 个答案:

答案 0 :(得分:0)

出于某种原因,我认为可能不是空的,并且唯一的约束不会应用于参考字段。在任何情况下,如果插入通常是通过表单进行的,那么最好在字段上使用IS_NOT_IN_DB()验证器,因为这样可以在处理表单时启用正确的错误处理和显示。仅依赖unique=True将导致重复插入尝试时出现异常,这将为最终用户生成非特定的500服务器错误。