Django Academy · Lektion

Brugerdefineret validering med clean-metoder

Tilføj valideringsregler på felt- og formularniveau

Lektion 3 af 413 trin

Brugerdefineret validering med clean-metoder er en gratis Django Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Django Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Django Academy-kurset indeholder 4 lektioner i alt.

Ud over indbyggede regler

Modelfelter giver dig grundlæggende kontroller, men virkelige apps har brug for tilpassede regler. Django kører dine egne clean-metoder for at håndhæve præcis den logik, du ønsker. 🧹

clean på feltniveau

Hvis du vil validere ét felt, skal du tilføje en metode med navnet clean_fieldname. Django kalder den automatisk under valideringen af netop dette felt.

def clean_title(self):
    title = self.cleaned_data["title"]
    return title

Læs fra cleaned_data

Inde i en clean-metode henter du værdien fra cleaned_data. På dette tidspunkt har Django allerede konverteret den til den rigtige Python-type for dig.

title = self.cleaned_data["title"]

Afvis ved at udløse en fejl

Hvis en værdi bryder din regel, skal du udløse en ValidationError. Django fanger den og viser beskeden ved siden af feltet i formularen.

from django.core.exceptions import ValidationError
raise ValidationError("Title is too short.")

En reel feltkontrol

Her afviser vi titler på færre end fem tegn. Bemærk, at du skal return-ere værdien til sidst, så den bliver i cleaned_data.

def clean_title(self):
    title = self.cleaned_data["title"]
    if len(title) < 5:
        raise ValidationError("Too short.")
    return title

Returnér altid værdien

Den vigtigste regel for clean_fieldname er: return-ér den rensede værdi. Hvis du glemmer det, bliver feltet None, selv når inputtet var gyldigt.

clean på formularniveau

Hvis du vil sammenligne to felter, skal du tilsidesætte formularens samlede clean-metode. Den kører, efter alle kontroller på feltniveau er afsluttet.

def clean(self):
    cleaned = super().clean()
    return cleaned

Kald super().clean() først

Begynd din clean på formularniveau med at kalde super().clean(). Det giver dig hele cleaned_data-ordbogen, som er samlet fra feltkontrollerne.

cleaned = super().clean()
start = cleaned.get("start")
end = cleaned.get("end")

Sammenlign to felter

Nu kan du håndhæve regler på tværs af felter, f.eks. sikre, at end kommer efter start. Udløs ValidationError, når forholdet er forkert.

if start and end and end < start:
    raise ValidationError("End must be after start.")

Knyt fejl til et felt

I clean på formularniveau kan du målrette ét felt med add_error. Beskeden vises derefter lige ved siden af det pågældende input, ikke øverst.

self.add_error("end", "End must be after start.")

Valideringsrækkefølge

Django kører først hver clean_fieldname og derefter clean på formularniveau til sidst. Når du kender rækkefølgen, kan du placere hver regel det rigtige sted.

Hurtigt tjek

Hvor skal en regel, der sammenligner to felter, placeres?

Opsummering: Tilpasset validering

Godt klaret! Brug clean_fieldname til enkeltfelter og clean på formularniveau til regler på tværs af felter. Udløs ValidationError for at afvise, og returnér altid rensede værdier. 🎉

Gratis at komme i gang

Lær Python med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Brugerdefineret validering med clean-metoder” gratis?

Ja — alle 3 lektioner i læringssporet Django Academy, inklusive “Brugerdefineret validering med clean-metoder”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Django Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Brugerdefineret validering med clean-metoder”?

Tilføj valideringsregler på felt- og formularniveau Du øver dig i Django Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Django Academy?

Der kræves ingen tidligere erfaring. Django Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Brugerdefineret validering med clean-metoder”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Django Academy-lektion?

Ja. Alle Django Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Deklarering af en ModelForm og Meta.fields
  2. form.save() og commit=False
  3. Brugerdefineret validering med clean-metoder
  4. Widgets, labels og hjælpetekst
← Tilbage til Django Academy