这是我的代码:
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
。我怀疑我误解了胁迫是如何起作用的。
答案 0 :(得分:3)
虽然您已将bool传递给选项,但HTML值中仅使用字符串。因此,您将拥有选择值'True'
和'False'
。这两个都是非空字符串,因此当使用bool
强制值时,它们都会计算为True
。您需要使用不同的callable来为'False'
字符串做正确的事。
您还需要使用InputRequired
验证程序而不是DataRequired
。如果数据类似于False,则检查数据会失败,而只要输入不为空,检查输入就会生效。
SelectField(
choices=[(True, 'Yes'), (False, 'No')],
validators=[InputRequired()],
coerce=lambda x: x == 'True'
)