gpt4 book ai didi

python - WTForms RadioField 阻止表单验证

转载 作者:行者123 更新时间:2023-12-01 01:28:47 27 4
gpt4 key购买 nike

我有一个 WTForms 表单,其中包含几种不同类型的字段,除了 RadioField 之外,所有这些字段都有效。

Python: 从flask_wtf导入FlaskForm 从 wtforms 导入验证器、RadioField、DecimalField

class MyForm(FlaskForm):
field_one = DecimalField('Field 1', validators=[Optional()]
field_two = RadioField('Radio', choices=[(True, 'True'), (False, 'False')])
submit = SubmitField('Submit')

@app.route('/page', methods=['GET', 'POST'])
def page():
form = MyForm()
print('Page requested')

if form.validate_on_submit():
print('form validated')

return render_template('/page.html', form=form)

HTML:

<form method="POST">
<div class="row">
{{ form.hidden_tag() }}
{{ form.field_one.label }}
<div>
{{ form.field_one }}
</div>
</div>
<div class="row">
{{ form.hidden_tag() }}
{{ form.field_two.label }}
<div>
{% for subfield in form.field_two %}
<p>{{ subfield }} - {{ subfield.label }}
{% endfor %}
</div>
</div>
</form>

当我取出与 field_two (RadioField)相关的任何内容时,print('form validated') 将在每次按下提交时执行。

但是一旦包含 RadioField,表单就永远不会被验证。我认为这可能是因为该字段没有关联的验证器,但当我将 validators=[Optional()] 添加到 field_two 时它仍然不起作用定义。

有人知道为什么表单没有通过 RadioField 进行验证吗?

(我已经尝试了我能想到的四个选项。单击提交并选择或不选择单选选项,然后在表单定义中添加和删除可选验证器。)

最佳答案

我相信这是因为类型检查。你应该告诉它像这样强制转换为 bool 值:

field_two = RadioField('Radio', coerce=bool, choices=[(True, 'True'), (False, 'False')])

编辑:或者更好的是,使用 1 和 0 并强制转换为 int,如下所示:

field_two = RadioField('Radio', coerce=int, choices=[(1, 'True'), (0, 'False')])

然后您可以检查值是否为真,或者将其转换为 bool 值,如下所示:

bool(form.field_two.data)

关于python - WTForms RadioField 阻止表单验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com