是否可以将单个数据库值(例如,帖子/邮政编码)分成两个html输入标签(第一个中的前4个数字,第二个中的最后3个数字)。
我目前正在使用显示表单的辅助方法,但据我所知,我可以使用' raw' html实现同样的事情(如果是这样的话,我根本不介意改变我的视图文件以获得原始的html)。那么有没有一种方法可以使用原始html,有两个输入标签用于邮政编码,并以某种方式将它们的值组合在控制器中?
所以这是我的模型文件:
db.define_table(
'user_address',
Field('street_address', 'string', requires=IS_NOT_EMPTY()),
Field('city', 'string', requires=IS_NOT_EMPTY()),
Field('country', 'string', requires=IS_NOT_EMPTY()),
Field('postcode', 'string', requires=IS_LENGTH(7)),
)
这是我的控制者:
def new():
form = SQLFORM(db.user_address)
if form.accepts(request,session):
response.flash = "form accepted"
return dict(form = form)
这是我的观点:
<section>
<h2>Register</h2>
{{=form.custom.begin}}
{{=form.custom.widget.street_address}}
<br>
{{=form.custom.widget.city}}
<br>
{{=form.custom.widget.post_code}}
<br>
{{=form.custom.widget.country}}
<br><br>
{{=form.custom.submit}}
{{=form.custom.end}}
</section>
答案 0 :(得分:0)
如果要使用内置表单处理功能,将字段拆分为两个输入可能会变得复杂。一种更简单的方法可能是在数据库表中包含两个额外的字段,并将组合的&#34;邮政编码&#34;字段计算字段:
db.define_table('user_address',
Field('street_address', 'string', requires=IS_NOT_EMPTY()),
Field('city', 'string', requires=IS_NOT_EMPTY()),
Field('country', 'string', requires=IS_NOT_EMPTY()),
Field('postcode1', label='Postal Code', requires=IS_LENGTH(4)),
Field('postcode2', requires=IS_LENGTH(3)),
Field('postcode', compute=lambda r: r.postcode1 + r.postcode2,
readable=False, writable=False)
您仍然需要使用自定义表单代码,这样您就可以将postcode1和postcode2输入保持为内联并抑制postcode2的标签。
上面的默认表定义将始终显示postcode1和postcode2字段并隐藏邮政编码字段(即,在表单和网格中)。如果您只是显示记录(例如,使用网格功能),则可以将postcode1和postcode2的readable
和writable
属性设置为False
,将邮政编码属性设置为{{ 1}}。
另一个选择是为&#34;邮政编码&#34;定义一个自定义小部件。领域。窗口小部件应包含要在窗体中显示的两个可见输入元素,以及名称为&#34; postcode&#34;的隐藏输入元素。然后,您需要一些Javascript(可以包含在窗口小部件代码中或简单地单独加载)以自动连接两个可见输入中的值并将结果放入隐藏输入中。窗口小部件代码也将获取邮政编码字段中的现有值并将其拆分为两个可见窗口小部件(这对于更新窗体是必需的,它会在所有窗体输入中显示现有值。)