Własna walidacja za pomocą metod clean
Dodawanie reguł walidacji pól i formularza
Własna walidacja za pomocą metod clean to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Beyond Built-in Rules
Model fields give you basic checks, but real apps need custom rules. Django runs your own clean methods to enforce exactly the logic you want. 🧹
Field-Level clean
To validate one field, add a method named clean_fieldname. Django calls it automatically during validation for that single field.
def clean_title(self):
title = self.cleaned_data["title"]
return titleRead from cleaned_data
Inside a clean method, pull the value from cleaned_data. By this point Django has already converted it to the right Python type for you.
title = self.cleaned_data["title"]Raise to Reject
If a value breaks your rule, raise a ValidationError. Django catches it and shows the message next to that field in the form.
from django.core.exceptions import ValidationError
raise ValidationError("Title is too short.")A Real Field Check
Here we reject titles shorter than five characters. Note you must return the value at the end so it stays in cleaned_data.
def clean_title(self):
title = self.cleaned_data["title"]
if len(title) < 5:
raise ValidationError("Too short.")
return titleAlways Return the Value
The golden rule of clean_fieldname: return the cleaned value. Forget it and the field becomes None, even when input was valid.
Form-Level clean
To compare two fields, override the whole-form clean method. It runs after every field-level check has finished.
def clean(self):
cleaned = super().clean()
return cleanedCall super().clean() First
Begin your form-level clean by calling super().clean(). That gives you the full cleaned_data dict gathered from the field checks.
cleaned = super().clean()
start = cleaned.get("start")
end = cleaned.get("end")Compare Two Fields
Now you can enforce cross-field rules, like making sure end comes after start. Raise ValidationError when the relationship is wrong.
if start and end and end < start:
raise ValidationError("End must be after start.")Attach Errors to a Field
In form-level clean you can target one field with add_error. The message then appears right beside that input, not at the top.
self.add_error("end", "End must be after start.")Order of Validation
Django runs each clean_fieldname first, then the form-level clean last. Knowing this order helps you place each rule in the right spot.
Quick Check
Where should a rule that compares two fields live?
Recap: Custom Validation
Well done! Use clean_fieldname for single fields and form-level clean for cross-field rules. Raise ValidationError to reject, and always return cleaned values. 🎉
Często zadawane pytania
Czy lekcja „Własna walidacja za pomocą metod clean” jest bezpłatna?
Tak — pełny tekst „Własna walidacja za pomocą metod clean” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Własna walidacja za pomocą metod clean”?
Dodawanie reguł walidacji pól i formularza Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Django Academy?
Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Własna walidacja za pomocą metod clean”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?
Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Deklarowanie ModelForm i Meta.fields
- form.save() i commit=False
- Własna walidacja za pomocą metod clean
- Widgets, Labels i Help Text