Sí, los validadores personalizados pueden controlar el flujo de validación al igual que los validadores Opcional y Requerido incorporados. Para controlar el flujo de validación, utiliza la excepción StopValidation
, y no se realizará ninguna otra validación.
Si StopValidation aparece con un mensaje, se agregará a la lista de errores; de lo contrario, si no hay ningún mensaje, no se agregarán más errores.
Si está utilizando, por ejemplo, IntegerField, FloatField, etc., también debe tener en cuenta los "errores de procesamiento" que se producen en el momento de la coerción de entrada. La forma en que el validador opcional maneja esto es borra todos los errores previos si la entrada está vacía. Vamos a echar un vistazo rápido en el código para la validación opcional de wtforms/fields.py:
if not field.raw_data or isinstance(field.raw_data[0], basestring) and not field.raw_data[0].strip():
field.errors[:] = []
raise StopValidation()
Como se puede ver una de las cosas que hace si no hay entrada o entrada en blanco, es claro que se cualquier error anterior.
Entonces, vamos a ver cómo podría hacer su validador personalizado.
from wtforms.validators import StopValidation
def myvalidator(form, field):
if not form.some_checkbox_field.data:
# clear out processing errors
field.errors[:] = []
# Stop further validators running
raise StopValidation()
A continuación, puede utilizar el validador como tales:
from wtforms import BooleanField, IntegerField, Form, validators as v
class SomeForm(Form):
some_checkbox_field = BooleanField('Enable MyNumber')
mynumber = IntegerField('', [myvalidator, v.NumberRange(min=5, max=50)])
Así pues, si se marca la casilla de verificación, se validará que myNumber era un número como introducido. Además, se ejecutará el validador NumberRange. Si no se verifica, los errores se borrarán, y StopValidation evitará que se ejecute NumberRange.
posible duplicado de [¿Cómo hacer un campo condicionalmente opcional en WTForms?] (Http://stackoverflow.com/questions/8463209/how-to-make-a-field-conditionally-optional-in-wtforms) – nsfyn55