【发布时间】:2017-08-23 21:10:39
【问题描述】:
如果您dynamically add a field to a WTForms form,则不会验证新添加的字段(即使您添加了验证器)。
例如,在 Flask 中:
@app.route('/add', methods=['GET', 'POST'])
def add():
if 'state' not in session:
session['state'] = 1
form = MyForm()
if request.method == 'POST' and form.validate():
if session['state'] == 1:
setattr(
MyForm,
'asd',
StringField(
'asdfield',
validators = [
DataRequired(),
Length(min=1)
]
)
)
form = MyForm()
session['state'] = 2
return render_template(
'add.html',
form=form
)
print(len(form.asd.data)) # can equal 0
session['state'] = 1
return redirect('/add')
return render_template(
'add.html',
form=form
)
我相信这是因为每次访问 /add 时都会运行 form = MyForm(),因此即使 session['state'] == 2 在没有动态添加字段的默认表单上运行 form.validate() .因此,该字段不能成为表单验证过程的一部分。
如何正确解决这种行为?如果不可能,那么如何动态地将字段添加到现有表单中,以使所有字段在提交时都得到正确验证?
【问题讨论】:
标签: python flask wtforms flask-wtforms