【问题标题】:Flask-WTForms How to bypass automatic pre-validate for Radio FieldsFlask-WTForms 如何绕过无线电字段的自动预验证
【发布时间】: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


    【解决方案1】:

    尝试手动创建一个与 RadioField 同名的隐藏字段,并为其指定一个值,您可以在提交表单时手动验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2020-07-15
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多