我目前的WTForms Number验证码如下:
class ScoreForm(Form):
score = FloatField(validators=[DataRequired(), NumberRange(0,100)])
submit = SubmitField()
我希望分数指定在0到100之间(包括允许的小数和小数)。
上述代码存在两个问题:
它不允许我输入0作为值。这样做会吐出内置错误消息
[This field is required.]
如果我在字段中输入一些字符串,我会收到与上面相同的错误消息,这不是正确的消息。
如何纠正这两个问题?
答案 0 :(得分:1)
经过FloatField
和DecimalField
的许多奇怪行为后,我终于使用StringField
并为我的上述用例编写了一个自定义验证器,如下所示:
class ScoreForm(Form):
score = StringField(validators=[DataRequired()])
add_score = SubmitField()
def __init__(self):
Form.__init__(self)
def validate(self):
if not Form.validate(self):
return False
try:
float(self.score.data)
except ValueError:
self.score.errors.append(
'Score must be a valid number')
return False
if 0 > float(self.score.data) > 100:
self.score.errors.append(
'Score must be in the range 0-100')
return False
return True
答案 1 :(得分:0)
问题不是NumberRange验证程序,而是DataRequired验证程序。参见:
https://stackoverflow.com/a/25335781/1194335
TL; DR:DataRequired将0评估为false,您将需要使用InputRequired验证器!