Kann ein benutzerdefinierter Validator ein Feld optional machen?

8

Ich verwende einen benutzerdefinierten Validator, um zu überprüfen, ob ein Feld nicht leer ist, wenn ein Kontrollkästchen aktiviert ist. Es prüft korrekt, aber es wird immer noch validiert, wenn der Wert eine Zahl ist.

Im Grunde brauche ich ein Feld, um die Validierung unter bestimmten Bedingungen des Formulars zu stoppen.

Gibt es eine Möglichkeit, dass der benutzerdefinierte Validierer die Validierung auf dem Feld stoppt?

    
MKaras 09.12.2011, 12:13
quelle

1 Antwort

12

Ja, benutzerdefinierte Validatoren können den Validierungsablauf genauso steuern wie die integrierten optionalen und erforderlichen Validatoren. Um den Validierungsablauf zu steuern, verwenden Sie die Ausnahme StopValidation , und es wird keine weitere Validierung durchgeführt.

Wenn StopValidation mit einer Nachricht ausgelöst wird, wird sie der Fehlerliste hinzugefügt, andernfalls werden keine weiteren Fehler hinzugefügt, wenn keine Nachricht vorhanden ist.

Wenn Sie z. B. IntegerField, FloatField usw. verwenden, müssen Sie auch die "Verarbeitungsfehler" beachten, die bei der Eingabezwangszeit auftreten. Die Art und Weise, wie der optionale Validierer dies handhabt, löscht alle vorherigen Fehler, wenn die Eingabe leer ist. Werfen wir einen Blick auf den Code für den optionalen Validator aus wtforms / fields.py:

%Vor%

Wie Sie sehen können, wenn es keine Eingabe oder leere Eingabe gibt, löscht es alle vorherigen Fehler.

Also, lassen Sie uns herausfinden, wie Sie Ihren benutzerdefinierten Validator machen können.

%Vor%

Sie könnten Ihren Validator dann wie folgt verwenden:

%Vor%

Wenn also das Kontrollkästchen aktiviert ist, wird bestätigt, dass es sich bei der Nummer um eine eingegebene Nummer handelt. Außerdem wird der NumberRange-Validator ausgeführt. Wenn diese Option nicht aktiviert ist, werden Fehler gelöscht und die StopValidation verhindert die Ausführung von NumberRange.

    
Crast 09.12.2011, 19:00
quelle

Tags und Links