在视图功能中修改表单字段的属性时,validate_on_submit开机自检失败



我有一个简单的wtforms.RadioField来接受应用程序中定义为以下内容的表单中的用户选择:

class VoteForm(FlaskForm):
vote_option = RadioField("Choices", coerce=int)
submit = SubmitField('Submit')

我的视图功能是:

@main.route('/poll/<poll_id>/vote', methods=["GET", "POST"])
def vote(poll_id):
poll = Poll.query.filter_by(id=poll_id).first()
form = VoteForm()
form.vote_option.choices = [(o.id, o.option) for o in poll.options]
form.vote_option.default = poll.options[0].id
form.process()
if form.validate_on_submit():
print(form.vote_option.data)
return render_template("vote.html", form=form)

模板很简单:

{% extends "base.html" %}
{% import "bootstrap/form.html" as wtf %}
{% block page_content %}
{{ wtf.render_form(form) }}
{% endblock %}

但是,当我从表单发布时,它未经验证,并且不会将任何内容打印到控制台。

如果我在视图函数中删除对表单的修改并将vote_option字段定义为:

vote_option = RadioField("Choices", choices=[("ONE", "ONE"), ("TWO", "TWO")])

表单可以按预期进行验证。在视图函数中修改表单的属性会出错吗?

在视图函数中删除对form.process()的调用解决了这个问题。虽然我不完全确定为什么。我会接受一个可以解释原因的答案。

最新更新