【发布时间】:2014-10-09 17:15:38
【问题描述】:
This question 几乎涵盖了我在这里所追求的,但并不完全。
当字符串值为“0”时,似乎 IntegerField 会跳过强制转换。任何其他正整数似乎都可以正常工作。
这里是一个'0'的例子:
from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict
class TestForm(Form):
num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])
data_in = {'num': '0'} # Note '0' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print(" Validate: %s" % test_form.validate())
print(" Errors: %s" % test_form.errors)
这个输出是:
HTML Render: <input id="num" name="num" type="text" value="0">
Validate: False
Errors: {'num': ['num required.']}
或者,使用 '66' 的示例:
from wtforms import validators, Form, IntegerField
from webob.multidict import MultiDict
class TestForm(Form):
num = IntegerField('How Many?', [validators.DataRequired('num required.'), validators.NumberRange(min=0, max=100)])
data_in = {'num': '66'} # Note '66' is a string as would be POSTed
test_form = TestForm(formdata=MultiDict(data_in))
print("HTML Render: %s" % test_form.num())
print(" Validate: %s" % test_form.validate())
print(" Errors: %s" % test_form.errors)
其中有:
HTML Render: <input id="num" name="num" type="text" value="66">
Validate: True
Errors: {}
什么给了?我可以改用 InputRequired 来保持它与类型无关,但这完全违背了这样做的目的。
【问题讨论】:
-
在 WTForms github.com/wtforms/wtforms/issues/100 的错误跟踪器中发现错误
-
这里对这种现象进行了更深入的讨论。 stackoverflow.com/questions/23982917/…
标签: python flask wtforms flask-wtforms