2013-11-04 43 views
3

當我創建使用wtf_forms和燒瓶WTF的格式,並使用該輸入IntegerField,我不能結合長度驗證器使用它燒瓶WTForms拋出錯誤對於IntegerField代替驗證失敗

如果刪除長度限制,然後它工作正常。當然,我應該能夠將長度驗證應用於IntegerField?

Python代碼。

from flask_wtf import Form 
from wtforms import TextField, PasswordField, IntegerField, validators 

class RegistrationForm(Form): 
    firstname = TextField('First Name', [validators.Required()]) 
    lastname = TextField('Last Name', [validators.Required()]) 
    telephone = IntegerField('Telephone', [validators.Length(min=10, max=10, message="Telephone should be 10 digits (no spaces)")]) 

TypeError 
TypeError: object of type 'int' has no len() 

Traceback (most recent call last) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1701, in __call__ 
return self.wsgi_app(environ, start_response) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1689, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1687, in wsgi_app 
response = self.full_dispatch_request() 
File "C:\Python27\lib\site-packages\flask\app.py", line 1360, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "C:\Python27\lib\site-packages\flask\app.py", line 1358, in full_dispatch_request 
rv = self.dispatch_request() 
File "C:\Python27\lib\site-packages\flask\app.py", line 1344, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "C:\index.py", line 45, in submit 
if form.validate_on_submit(): 
File "C:\Python27\lib\site-packages\flask_wtf\form.py", line 156, in validate_on_submit 
return self.is_submitted() and self.validate() 
File "C:\Python27\lib\site-packages\wtforms\form.py", line 271, in validate 
return super(Form, self).validate(extra) 
File "C:\Python27\lib\site-packages\wtforms\form.py", line 130, in validate 
if not field.validate(self, extra): 
File "C:\Python27\lib\site-packages\wtforms\fields\core.py", line 175, in validate 
stop_validation = self._run_validation_chain(form, chain) 
File "C:\Python27\lib\site-packages\wtforms\fields\core.py", line 195, in _run_validation_chain 
validator(form, self) 
File "C:\Python27\lib\site-packages\wtforms\validators.py", line 91, in __call__ 
l = field.data and len(field.data) or 0 
TypeError: object of type 'long' has no len() 

回答

15

下面的錯誤意味着您正在嘗試檢查python不允許的整數長度。如果你想檢查長度,那麼它必須是一個字符串。 IntegerField()然而根據定義是一個整數

object of type 'int' has no len() 

您需要創建類似下面的內容。 NumberRange需要一系列數字。

IntegerField('Telephone', [validators.NumberRange(min=0, max=10)]) 

另外,我建議你使用一個FormField並定義你自己的電話域。有一個確切的例子在這裏創建一個電話場:

http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.FormField

+0

謝謝!它有幫助 – Nava