python - passwordfield - validator wtforms
Escriba error al llamar validar en wtforms (1)
Tengo TypeError en línea donde llamo ''validate ()'' en mi formulario.
El error es:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/valery/projects/easy_booking/easy_booking/controllers/users.py", line 110, in process_field
if filled_form.validate():
File "/usr/local/lib/python2.7/dist-packages/wtforms/form.py", line 265, in validate
return super(Form, self).validate(extra)
File "/usr/local/lib/python2.7/dist-packages/wtforms/form.py", line 130, in validate
if not field.validate(self, extra):
File "/usr/local/lib/python2.7/dist-packages/wtforms/fields/core.py", line 176, in validate
stop_validation = self._run_validation_chain(form, chain)
File "/usr/local/lib/python2.7/dist-packages/wtforms/fields/core.py", line 196, in _run_validation_chain
validator(form, self)
TypeError: __init__() takes at most 2 arguments (3 given)
Mi código:
@app.route("/process_field", methods=[''POST''])
def process_field():
file = request.files[''upload'']
filled_form = FieldFootball(request.form)
if filled_form.validate():
filename = secure_filename(file.filename)
file.save(os.path.join(app.config[''UPLOADS_FOLDER''], filename))
doc = {"organization": filled_form.org_name.data, "address": filled_form.address.data,
"filename": filename, "price": filled_form.price.data, "phone": filled_form.phone.data,
"phone1": filled_form.phone1.data, "phone2": filled_form.phone2.data, "user_id": current_user.dic[''_id'']}
field = Field(doc)
field.save()
return redirect(url_for(''field_profile'', id=field.id))
else:
return render_template("add_field.html", form=filled_form)
class FieldFootball(Form):
org_name = TextField(u''Название организации'', [validators.Required])
address = TextAreaField(u''Полный адрес футбольного поля'',[validators.Required])
upload = FileField(u''Фотографии футбольного поля'', validators=[
FileRequired(),
FileAllowed([''jpg'', ''png''], u''Только фотографии!'')
])
price = TextField(u''Цена'', [validators.Required, validators.NumberRange])
phone = TextField(u''Телефоны'', [validators.Required])
phone1 = TextField(u'''')
phone2 = TextField(u'''')
my_choices = [(''1'', u''Трава''), (''2'', u''Крытый''), (''3'', u''Трибуны'')]
list_tags = MultiCheckboxField(choices = my_choices)
Es un poco raro porque lo usé en el controlador anterior, y va sin ningún argumento.
Por favor, ayúdame a resolverlo.
Necesita crear instancias de sus validadores:
org_name = TextField(u''Название организации'', [validators.Required()])
Tenga en cuenta el ()
después de Required
; esto se aplica a todos sus validadores. La instancia se llama nuevamente para validar la entrada.