我有一个简单的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()
的调用解决了这个问题。虽然我不完全确定为什么。我会接受一个可以解释原因的答案。