Menu
CoddyTech

Ein Feld überprüfen

Teil des Abschnitts Formulare der Django-Journey von Coddy. Lektion 10 von 20.

Das Board akzeptiert Ereignisse, die auf das letzte Jahr datiert sind. Die integrierten Regeln kennen Typen und Grenzwerte, aber nicht deine Website. Eine eigene Regel für ein Feld kommt in eine Methode, die clean_ plus den Namen des Feldes heißt. Ein Anmeldeformular, das den Namen admin für das Personal reserviert:

class SignupForm(forms.Form):
    username = forms.CharField(max_length=30)

    def clean_username(self):
        username = self.cleaned_data["username"]
        if username.lower() == "admin":
            raise forms.ValidationError("That name is reserved.")
        return username

is_valid() ruft sie nach den eigenen Prüfungen des Feldes auf, sodass der Wert bereits umgewandelt ist: Ein DateField liefert ein Datum. Das Auslösen von forms.ValidationError weist das Feld zurück, und die Meldung erscheint darunter.

Die Methode muss den Wert zurückgeben: Was sie zurückgibt, landet in cleaned_data. Ohne das return wird der Wert zu None.

challenge icon

Aufgabe

Einfach

Lehne in EventForm ein Datum vor dem heutigen Tag mit der Meldung The date cannot be in the past. ab. Ein Ereignis am heutigen Tag ist in Ordnung.

Klicke auf „Ausführen“ und füge ein Ereignis mit dem Datum von gestern hinzu.

Probier es selbst

from django import forms


class EventForm(forms.Form):
    title = forms.CharField(max_length=100)
    date = forms.DateField()
    place = forms.CharField(max_length=100)
    description = forms.CharField(widget=forms.Textarea, required=False)
    capacity = forms.IntegerField(min_value=1)

Alle Lektionen in Formulare

Übe selbstständig: Django-Playground