[英]WTForms: IntegerField skips coercion when string value is '0'
這個問題幾乎涵蓋了我在此之后的情況,但並不完全。
當字符串值為'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來保持它類型不可知,但這完全違背了這個目的。
我擔心你必須保持該類型不可知並改為使用InputRequired :-)
這里的文檔說:
“[...]這個驗證器過去被稱為必需但它的行為方式(需要強制數據,而不是輸入數據)意味着它的運行方式與可選驗證器不對稱,並且進一步導致與強制某些字段混淆數據為'falsey'值,如0,十進制(0),時間(0)等。除非存在非常具體的原因,否則我們建議使用:class:InputRequired。“
實際的代碼杯值略低於第201行:
if not field.data
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.