2015-04-07 6 views
0

Я пытаюсь использовать wtforms, чтобы проверить, являются ли данные в словаре требуемого типа. В приведенном ниже примере я хочу убедиться, что some_field в словаре является целым числом. Документация заставляет меня думать, что если я использую IntegerField, данные будут принудительно привязаны к целому числу, StringField будет принуждать к строке и т. Д. Однако foo.validate() возвращает True, даже если тип some_field не является целым числом. Это ожидаемое поведение и почему? Если это ожидаемое поведение, можно ли использовать wtforms для проверки типа по желанию?WTForms не проверяющий тип

>>> from wtforms import Form, IntegerField, validators 

>>> class Foo(Form): 
...  some_field = IntegerField(validators=[validators.Required()]) 

>>> foo = Foo(**{'some_field':'some text input'}) 

>>> foo.data 
{'some_field': 'some text input'} 

>>> foo.validate() 
True 

>>> IntegerField? 
Type:   type 
String form:  <class 'wtforms.fields.core.IntegerField'> 
File:   c:\users\aergener\appdata\local\continuum\anaconda\envs\env\lib\site-packages\wtforms\fields\core.py 
Init definition: IntegerField(self, label=None, validators=None, **kwargs) 
Docstring: 
A text field, except all input is coerced to an integer. Erroneous input 
is ignored and will not be accepted as a value. 
+1

Посмотреть этот пост http://stackoverflow.com/questions/22585652/wtforms-integerfield-skips- принуждение на-строковое значение – Max

ответ

0

данные должны быть переданы formdata аргумента формы для того, чтобы заставить тип принуждения. Чтобы передать данные до formdata, используйте MultiDict.

In [2]: from wtforms import Form, IntegerField, validators 

In [3]: class Foo(Form): 
    ...:  some_field = IntegerField(validators=[validators.Required()]) 

In [4]: from werkzeug.datastructures import MultiDict 

In [5]: foo = Foo(formdata=MultiDict({'some_field':'some text input'})) 

In [6]: foo.data 
Out[6]: {'some_field': None} 

In [7]: foo.validate() 
Out[7]: False 

Благодаря Максу в комментариях за указание на эту ссылку с ответом и получения более подробной информации: WTForms: IntegerField skips coercion on a string value