【发布时间】:2020-09-01 20:29:15
【问题描述】:
我正在尝试创建一个包含两个提交字段的表单 - 过滤器和提交。对于过滤器,我有一个带有名称列表的选择字段,如果他们选择了一个名称,我想根据该名称过滤现有页面。对于提交,我有一个单选字段,并希望根据选择跳转到不同的页面。对于过滤器,我不希望对 Radio 字段进行任何验证,对于提交,我不希望对 Select Field 进行任何验证。
这似乎适用于我的选择字段 - 它仅在我点击过滤器按钮时才有效。但是对于 Radio Field,它总是会验证,无论我点击哪个按钮,我都会得到以下信息:
[不是一个有效的选择]
这是我的代码 sn-ps。 html:
<h2>Filter</h2>
<p>
{{ form.player.label }}<br>
{{ form.player }}
{% for error in form.player.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.filter() }}</p>
<h2>Games to be played</h2>
<p>
{{ form.result.label }}<br>
{{ form.result }}
{% for error in form.result.errors %}
<span style="color: red;">[{{ error }}]</span>
{% endfor %}
</p>
<p>{{ form.submit() }}</p>
表格:
class MatchupsForm(FlaskForm):
player = SelectField(u'Filter by Player', coerce=int)
filter = SubmitField('Filter')
result = RadioField(u'Select Game to Update', coerce=int)
submit = SubmitField('Update')
def validate_player(self, player):
if (player.data == 0) and self.filter.data:
raise ValidationError("Please select a Name to filter on")
return False
return True
def validate_result(self, result):
if not result.data and self.submit.data:
raise ValidationError("Please select a Matchup")
return False
return True
我已经通过创建尝试了Flask-WTForms How to override pre validate on Radio Fields 的建议
def pre_validate(self, form):
for v, _ in self.choices:
if self.data == v:
break
else:
raise ValueError(self.gettext('Need a Matchup'))
但这也不起作用 - 我得到了同样的错误。请注意,我的其他验证器似乎工作正常 - 当我单击没有选择玩家的过滤器时,我会看到该错误,但如果我单击没有结果选择的提交,我会看到默认错误和我的自定义错误。
[不是一个有效的选择] [请选择一个匹配]
感谢您对如何完成这项工作的任何见解。
【问题讨论】:
标签: python validation flask flask-wtforms wtforms