En flacon de WTForms déclenche une erreur pour IntegerField au lieu de la faute de validation
Quand j'ai créer un formulaire à l'aide de wtf_forms et en Flacon de WTF et de l'utilisation de la IntegerField d'entrée, je ne peux pas l'utiliser en combinaison avec la Longueur du programme de validation
Si je supprime la limitation de la Longueur puis il fonctionne très bien. Certes, je devrait être en mesure d'appliquer une Longueur de validation à un IntegerField?
Code 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()
- Vous code dire : téléphone = IntegerField('Téléphone', [validateurs.Longueur(min=10, max=10, message="Téléphone de 10 chiffres (sans espaces)")]) Vous avez besoin de remplacer IntegerField à ce StringField: téléphone = StringField('Téléphone', [validateurs.Longueur(min=10, max=10, message="Téléphone de 10 chiffres (sans espaces)")])
Vous devez vous connecter pour publier un commentaire.
L'erreur ci-dessous signifie que vous essayez de vérifier la longueur d'un entier qui n'est pas autorisé par python. Si vous voulez vérifier la longueur, alors il doit être une chaîne de caractères. IntegerField() or, par définition, est un entier
Vous avez besoin de créer quelque chose comme ci-dessous. NumberRange prend une série de nombres.
Sinon,je vous suggère d'utiliser un FormField et de définir votre propre champ téléphone. Il y a un exemple précis ici pour créer un champ téléphone:
http://wtforms.simplecodes.com/docs/0.6.1/fields.html#wtforms.fields.FormField
De la http://wtforms.readthedocs.org/en/latest/validators.html#wtforms.validators.Length
"Valide la longueur d'une chaîne."
Aussi, je ne pense pas que c'est une bonne idée de stocker ou de valider les numéros de téléphone que les nombres entiers. Vous devriez probablement utiliser
wtforms.validators.Regexp
pour valider le numéro.