Menu
CoddyTech

Ein Feld überprüfen

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

Das Formular akzeptiert ein Ereignis, das auf das letzte Jahr datiert ist. Djangos integrierte Prüfungen kennen Typen und Grenzen, aber nicht die Regeln deiner Website. Eine eigene Regel für ein Feld kommt in eine Methode namens clean_ plus den Namen des Feldes. 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 daneben.

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.

Füge ein Ereignis hinzu, das auf gestern datiert ist und im Format 2026-10-30 eingegeben wurde: Du siehst The date cannot be in the past.

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