我正在努力寻找更好的解决方案。我的解决方案现在非常笨拙(但是很有效),因为如果我想要20个选择领域......你可以想象模板看起来有多么可怕和长久等等......
所以基本上我要问的是,如果WTForm中存在一些SelectFieldArray对象?我没有在文档中找到。
所以这是我现在的尴尬解决方案:
在我的视图方法中,我这样做:
form = ResultForm()
if form.validate_on_submit():
print form.f1.data
print form.f2.data
我的模板:
{% extends "base.html" %}
{% block body %}
<form method="post">
{{ form.hidden_tag() }}
<p>
<label for="title">
{{form.f1.label}}
</label><br/>
{{form.f1}}
<label for="title">
{{form.f2.label}}
</label><br/>
{{form.f2}}
{% if form.f1.errors %}
<ul class="errors">
{% for error in form.f1.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
{% if form.f2.errors %}
<ul class="errors">
{% for error in form.f1.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
<input type="submit" value="Go">
</form>
{% endblock %}
我的WTForm课程:
from flask.ext.wtf import Form
from wtforms import TextField, PasswordField,SelectField,validators
from wtforms.validators import Required
class ResultForm(Form):
f1 = SelectField(u'f1',
coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),(6, 'FX'),(7, 'na')])
f2 = SelectField(u'f2',
coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'),(2, 'B'),(3, 'C'),(4, 'D'),(5, 'E'),(6, 'FX'),(7, 'na')])
答案 0 :(得分:0)
要重复一个字段,您可以使用wtforms.fields.FieldList
(请参阅有关Field Closures的文档):
class ResultForm2(BaseForm):
selects = FieldList(SelectField(u'Select', coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]), min_entries=2)
产生两个名为“select-0”和“choices-1”的选择输入(因为min_entries设置为2)。两者都有相同的数据。
您还可以动态创建表单(请参阅有关Dynamic Form Composition的文档),例如:
def my_dynamic_form(select_field_count=20):
class F(MyBaseForm):
pass
for i in range(select_field_count):
setattr(F, 'f%d' % i, SelectField('F%d' % i, coerce=int,
validators=[validators.optional()],
choices=[(1, 'A'), (2, 'B'), (3, 'C'),
(4, 'D'), (5, 'E'), (6, 'FX'),
(7, 'na')]))
return F
这样,表单可以完全动态构建,例如SelectFields可以有不同的选择。
答案 1 :(得分:0)
@oliverdm 我甚至不能在没有50名声明的情况下评论你的回应... n / c
我试图做的是:
<form action="">
<select name="" id=""></select>
<select name="" id=""></select>
<select name="" id=""></select>
<select name="" id=""></select>
<select name="" id=""></select>
<select name="" id=""></select>
</form>
没有这样做......
class ResultForm(Form):
f1 = SelectField(u'f1',...
f2 = SelectField(u'f2',...
f3 = SelectField(u'f3',...
f4 = SelectField(u'f4',...
f5 = SelectField(u'f5',...
然后使用view方法执行类似form [i] .data ...或某事.... 这是你的代码示例吗?