Tak, niestandardowe weryfikatory mogą kontrolować przepływ sprawdzania poprawności, podobnie jak wbudowane opcjonalne i wymagane weryfikatory. Aby kontrolować przepływ sprawdzania poprawności, należy użyć wyjątku StopValidation
i dalsze sprawdzanie nie zostanie wykonane.
Jeśli komunikat StopValidation zostanie podniesiony, zostanie dodany do listy błędów, w przeciwnym razie, jeśli nie ma komunikatu, nie będzie więcej błędów.
Jeśli używasz, powiedzmy, IntegerField, FloatField, itp., Musisz również pamiętać o "błędach przetwarzania", które występują w czasie przymusu. Sposób, w jaki obsługuje to opcjonalny moduł sprawdzania poprawności, powoduje wyczyszczenie wszystkich poprzednich błędów, jeśli dane wejściowe są puste. Weźmy po prostu rzucić okiem na kod dla opcjonalnego walidator z 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()
Jak widać jedna z rzeczy robi, jeśli nie ma sygnału wejściowego lub puste, to będzie to wyczyścić wszelkie wcześniejsze błędy.
Wyjaśnimy więc, w jaki sposób można wykonać własny weryfikator.
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()
Następnie można używać walidatora takie jak:
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)])
Tak więc, jeśli pole jest zaznaczone, to potwierdzić, że MyNumber był wprowadzany jako liczba. Dodatkowo uruchomiony zostanie walidator NumberRange. Jeśli nie jest zaznaczone, błędy zostaną usunięte, a funkcja StopValidation uniemożliwi działanie funkcji NumberRange.
możliwy duplikat [Jak zrobić pole warunkowo opcjonalne w WTForms?] (Http://stackoverflow.com/questions/8463209/how-to-make-a-field-conditionally-optional-in-wtforms) – nsfyn55