0

我定义了一个表如下:

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')

我指定了 requires 约束如下

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

4

1 回答 1

0

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

于 2012-12-06T21:13:36.480 回答