使用
我已经定义了以下的 表单:
WTForms
,我要求用户输入两个数字,这些数字将用于简单的计算,并且需要对这些数字进行验证。我已经定义了以下的 表单:
class AForm(Form):
ff=DecimalField(default=0.0, validators=[NumberRange(min=0, max=2)])
模板
<form action="/test" method=post>
{% for L in entries %}
{{ render_field(form.ff) }}
{% endfor %}
<input class="button" type="submit" value="calc">
</form>
Flask视图
@app.route('/test', methods=['GET', 'POST'])
def get_form():
entries=[0, 1]
form = AForm(request.form)
ff_l=request.form.getlist('ff')
if request.method == 'POST' and form.validate():
L=0
v=0
a=0
b=0
for L,v in enumerate(ff_l):
a=float(v)
b+=a
return render_template('res.html', b=b)
return render_template('test.html', entries=entries, form=form)
我知道我使用了getlist
方法,这不是WTForms
的一部分,但这是目前找到的唯一解决方案,因为通过执行ff_l=form.ff.data
,我只会得到与给定字段关联的一个值而不是整个列表。
当我想要验证提交的值时,问题就出现了:form.validate()
方法只会验证列表的第一个值,而第二个值则不会受到任何验证。
我的问题:有什么办法可以验证列表中每个值吗?
提前感谢!
form = AForm(request.form, ff=entries)
吗?特别是ff=entries
是什么意思:对于FieldList
,您必须产生条目的数量,这正确吗? - mannaiarequest.form
中没有提供数据时,ff=entries
应该设置条目 - 否则,由于最小条目数为0,将不会显示任何字段。如果您始终希望有最少数量的条目,则可以更改ff
的声明以指定字段的最小数量ff = FieldList(field, min=3)
(例如). - Sean VieiraFieldList
定义中将min
替换为min_entries
即可。 - mannaia