Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data access layer 在web2py中使用is_IN_DB指定时,不遵守唯一约束_Data Access Layer_Web2py - Fatal编程技术网

Data access layer 在web2py中使用is_IN_DB指定时,不遵守唯一约束

Data access layer 在web2py中使用is_IN_DB指定时,不遵守唯一约束,data-access-layer,web2py,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.fir

我定义了一个表,如下所示:

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
约束。如何更正此问题?

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

这样做将删除下拉列表,用户必须在文本字段中输入id。最后,我必须生成我自己的表单,而不是依赖SQLFORM来生成表单。如果您阅读了的文档,它将向您展示如何在仍然使用其他验证程序的情况下保留下拉列表(事实上,所示示例包括
IS NOT \u in \u DB()
验证程序)。您不需要生成自己的表单。