【发布时间】:2021-07-09 22:15:09
【问题描述】:
我想使用FieldList 通过 WTForms 构建表单。我有一个字符串列表,例如:
vehicles = ['car', 'truck', 'van']
我已经构建了我的表单,因此我有: 车辆 = ['汽车', '卡车', '面包车']
class VehicleForm(Form):
value = DecimalField()
class VehicleEntryForm(FlaskForm):
values = FieldList(
FormField(VehicleForm),
min_entries=len(vehicles))
submit = SubmitField('Submit')
我正在使用 jinja 作为:
<form action="" method="post">
{{ form.hidden_tag() }}
{% for value in form.values %}
{{value.label}}{{value()}}
{% endfor %}
{{ form.submit() }}
</form>
这将创建一个带有通用标签的表单,正如人们所期望的那样。表单标签的 html 格式如下:
...<label for="values-0-value">Value</label>...
...<label for="values-1-value">Value</label>...
...<label for="values-2-value">Value</label>...
问题是如何使用我的列表更新后端的标签值。我试过了:
form = VehicleEntryForm()
ii = 0
for field in form.values:
field.label = labels[ii]
ii+=1
然后将 html/jinja 更新为:
<form action="" method="post">
{{ form.hidden_tag() }}
{% for value in form.values %}
{{value.label}}{{value()}}
{% endfor %}
{{ form.submit() }}
</form>
但是,这导致现在有:
car<table id="values-0" label="car"><tr><th><label for="values-0-value">Value</label></th><td><input id="values-0-value" name="values-0-value" required type="text" value=""></td></tr></table>
truck<table id="values-1" label="truck"><tr><th><label for="values-1-value">Value</label></th><td><input id="values-1-value" name="values-1-value" required type="text" value=""></td></tr></table>
这让我走到了一半......但是我如何用<label for="values-0-value">Car</label>替换<label for="values-0-value">Value</label>?
注意:vehicles 列表来自模型查询,因此长度可以是可变的……这就是我尝试这个的原因(如果它总是相同的 3 件事,我就输入它)。
如果 FieldList 和 FormField 不可行,我愿意接受替代方法。
【问题讨论】:
标签: python flask jinja2 flask-wtforms wtforms