我正在使用Flask构建一个网站,其中使用WTForms。在表单中,我现在要使用表单域的字段列表,如下所示:
class LocationForm(Form):
location_id = StringField('location_id')
city = StringField('city')
class CompanyForm(Form):
company_name = StringField('company_name')
locations = FieldList(FormField(LocationForm))
因此,为了让人们有能力进入一家有两个地点的公司(地点的动态添加将在稍后进行),我在前面这样做:
<form action="" method="post" role="form">
{{ companyForm.hidden_tag() }}
{{ companyForm.company_name() }}
{{ locationForm.location_id() }}
{{ locationForm.city() }}
{{ locationForm.location_id() }}
{{ locationForm.city() }}
<input type="submit" value="Submit!" />
</form>
所以在提交时,我打印位置:
print companyForm.locations.data
但我知道
[{'location_id': u'', 'city': u''}]
我可以使用locationForm打印第一个位置的值(见下文),但我仍然不知道如何获取第二个位置的数据。
print locationForm.location_id.data
print locationForm.city.data
因此,位置列表中确实有一个dict值为空,但是:
有人知道我做错了什么吗?欢迎所有小费!
首先,有一个名为
min_entries
的FieldList参数,它将为您的数据腾出空间:这将按照您需要的方式设置列表。接下来,您应该直接从
locations
属性呈现字段,以便正确生成名称:看看呈现的html,输入应该有类似
locations-0-city
的名称,这样WTForms就会知道哪个是哪个。或者,对于元素的自定义呈现
(在wtforms中,
l.city
是l.form.city
的缩写。但是,这种语法似乎与Jinja冲突,因此有必要在模板中使用显式的l.form.city
)现在要准备提交的数据,只需创建
CompanyForm
,并在以下位置迭代:相关问题 更多 >
编程相关推荐