无效的 SQLFORM 提交生成票证而不是在表单上显示错误
Invalid SQLFORM submit generates ticket instead of showing errors on form
这是我的 db.py
:
db.define_table('antenna_details',
Field('antenna_name',required=True),
Field('model_name',required=True),
Field('project_name',required=True),
Field('frequency_band',required=True),
Field('polarization',required=True),
Field('aperture_size',required=True),
Field('fixer_availability',required=True),
Field('weight',required=True),
Field('material',required=True),
Field('email_id',required=True,unique=True,requires=[IS_NOT_IN_DB]),
Field('subject',type='text',required=True),
Field('attached',type='upload', label="""
Antenna/feed Geometry
Electrical specification
Attach Simulated data in predicted form
""")
)
db.antenna_details.email_id.requires=[IS_EMAIL(),IS_NOT_EMPTY()]
db.antenna_details.attached.requires=IS_NOT_EMPTY()
db.antenna_details.subject.rquires=IS_NOT_EMPTY()
db.antenna_details.material.requires=IS_NOT_EMPTY()
db.antenna_details.weight.requires=IS_NOT_EMPTY()
db.antenna_details.fixer_availability.requires=IS_NOT_EMPTY()
db.antenna_details.aperture_size.requires=IS_NOT_EMPTY()
db.antenna_details.polarization.requires=IS_NOT_EMPTY()
db.antenna_details.frequency_band.requires=IS_NOT_EMPTY()
db.antenna_details.project_name.requires=IS_NOT_EMPTY()
db.antenna_details.model_name.requires=IS_NOT_EMPTY()
这是我的 default.py 索引操作:
def index():
"""
example action using the internationalization operator T and flash
rendered by views/default/index.html or views/generic.html
if you need a simple wiki simply replace the two lines below with:
return auth.wiki()
"""
# response.flash = T("Hello World")
# return dict(message=T('Welcome to web2py!'))
form = SQLFORM(db.antenna_details).process()
if form.process().accepted:
response.flash = 'your data is posted'
return dict(form=form)
现在,当我点击 http://127.0.0.1:8000/Test/default
时,我得到了表格,当我使用数据库中已经存在的电子邮件 ID 提交它时,我收到了一张票,上面写着:
<class 'sqlite3.IntegrityError'> column email_id is not unique
模型中还有其他约束(特别是 IS_NOT_EMPTY()),但当违反此约束时,应用程序只是将用户重定向回表单并以红色显示错误。但是对于重复的电子邮件,它会抛出一张罚单。
为什么会发生这种情况以及需要做什么,以便在违反 IS_NOT_IN_DB 电子邮件约束时,它应该重定向回表单并在电子邮件字段附近以红色显示错误,类似于发生的情况违反 IS_NOT_EMPTY 约束?
Field('email_id',required=True,unique=True,requires=[IS_NOT_IN_DB]),
...
db.antenna_details.email_id.requires=[IS_EMAIL(),IS_NOT_EMPTY()]
有两个问题。首先,您的 IS_NOT_IN_DB
验证器不正确——它应该类似于 IS_NOT_IN_DB(db, 'antenna_details.email_id')
.
其次,在字段定义中将 email_id
字段的 requires
属性设置为 IS_NOT_IN_DB
之后,然后用新的验证器完全覆盖它,其中不包括 IS_NOT_IN_DB
。您应该附加额外的验证器或将它们全部定义在一个地方。 (就此而言,您可以将所有验证器分配移动到字段定义中,而不是将它们全部放在 table 定义之后。)
这是我的 db.py
:
db.define_table('antenna_details',
Field('antenna_name',required=True),
Field('model_name',required=True),
Field('project_name',required=True),
Field('frequency_band',required=True),
Field('polarization',required=True),
Field('aperture_size',required=True),
Field('fixer_availability',required=True),
Field('weight',required=True),
Field('material',required=True),
Field('email_id',required=True,unique=True,requires=[IS_NOT_IN_DB]),
Field('subject',type='text',required=True),
Field('attached',type='upload', label="""
Antenna/feed Geometry
Electrical specification
Attach Simulated data in predicted form
""")
)
db.antenna_details.email_id.requires=[IS_EMAIL(),IS_NOT_EMPTY()]
db.antenna_details.attached.requires=IS_NOT_EMPTY()
db.antenna_details.subject.rquires=IS_NOT_EMPTY()
db.antenna_details.material.requires=IS_NOT_EMPTY()
db.antenna_details.weight.requires=IS_NOT_EMPTY()
db.antenna_details.fixer_availability.requires=IS_NOT_EMPTY()
db.antenna_details.aperture_size.requires=IS_NOT_EMPTY()
db.antenna_details.polarization.requires=IS_NOT_EMPTY()
db.antenna_details.frequency_band.requires=IS_NOT_EMPTY()
db.antenna_details.project_name.requires=IS_NOT_EMPTY()
db.antenna_details.model_name.requires=IS_NOT_EMPTY()
这是我的 default.py 索引操作:
def index():
"""
example action using the internationalization operator T and flash
rendered by views/default/index.html or views/generic.html
if you need a simple wiki simply replace the two lines below with:
return auth.wiki()
"""
# response.flash = T("Hello World")
# return dict(message=T('Welcome to web2py!'))
form = SQLFORM(db.antenna_details).process()
if form.process().accepted:
response.flash = 'your data is posted'
return dict(form=form)
现在,当我点击 http://127.0.0.1:8000/Test/default
时,我得到了表格,当我使用数据库中已经存在的电子邮件 ID 提交它时,我收到了一张票,上面写着:
<class 'sqlite3.IntegrityError'> column email_id is not unique
模型中还有其他约束(特别是 IS_NOT_EMPTY()),但当违反此约束时,应用程序只是将用户重定向回表单并以红色显示错误。但是对于重复的电子邮件,它会抛出一张罚单。
为什么会发生这种情况以及需要做什么,以便在违反 IS_NOT_IN_DB 电子邮件约束时,它应该重定向回表单并在电子邮件字段附近以红色显示错误,类似于发生的情况违反 IS_NOT_EMPTY 约束?
Field('email_id',required=True,unique=True,requires=[IS_NOT_IN_DB]),
...
db.antenna_details.email_id.requires=[IS_EMAIL(),IS_NOT_EMPTY()]
有两个问题。首先,您的 IS_NOT_IN_DB
验证器不正确——它应该类似于 IS_NOT_IN_DB(db, 'antenna_details.email_id')
.
其次,在字段定义中将 email_id
字段的 requires
属性设置为 IS_NOT_IN_DB
之后,然后用新的验证器完全覆盖它,其中不包括 IS_NOT_IN_DB
。您应该附加额外的验证器或将它们全部定义在一个地方。 (就此而言,您可以将所有验证器分配移动到字段定义中,而不是将它们全部放在 table 定义之后。)