【问题标题】:WTForms SelectField not properly coercing for booleansWTForms SelectField 没有正确强制布尔值
【发布时间】:2016-01-30 11:55:09
【问题描述】:

这是我的代码:

class ChangeOfficialForm(Form):
    is_official = SelectField(
        'Officially Approved',
        choices=[(True, 'Yes'), (False, 'No')],
        validators=[DataRequired()],
        coerce=bool
    )
    submit = SubmitField('Update status')

出于某种原因,is_official.data 始终是 True。我怀疑我误解了强制的工作原理。

【问题讨论】:

    标签: python flask wtforms flask-wtforms


    【解决方案1】:

    虽然您已将布尔值传递给选项,但 HTML 值中仅使用字符串。因此,您将拥有'True''False' 的选择值。这两个都是非空字符串,所以当值被bool强制转换时,它们都计算为True。您需要使用不同的可调用对象来为'False' 字符串做正确的事情。

    您还需要使用InputRequired 验证器而不是DataRequired。如果数据是 False-like 则检查数据失败,而检查输入将验证只要输入不为空。

    SelectField(
        choices=[(True, 'Yes'), (False, 'No')],
        validators=[InputRequired()],
        coerce=lambda x: x == 'True'
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 2018-08-11
      • 2013-09-15
      • 2019-04-21
      • 2021-12-20
      相关资源
      最近更新 更多