Menu
CoddyTech

Tek Bir Alanı Denetleme

Coddy'nin Django Journey'sinin Formlar bölümünün bir parçası. Ders 10 / 20.

Form, geçen yıl tarihli bir etkinliği kabul ediyor. Django'nun yerleşik kontrolleri türleri ve sınırları bilir, sitenizin kurallarını bilmez. Tek bir alanla ilgili kendi kuralınız, alanın adının önüne clean_ eklenerek adlandırılan bir metoda yazılır. Personel için admin adını ayıran bir kayıt formu:

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(), alanın kendi kontrollerinden sonra bu metodu çağırır; dolayısıyla değer zaten dönüştürülmüştür: DateField bir tarih verir. forms.ValidationError hatası yükseltmek alanı reddeder ve mesaj alanın yanında görünür.

Metot, değeri döndürmelidir: döndürdüğü değer cleaned_data içine yazılır. return olmazsa değer None olur.

challenge icon

Görev

Kolay

EventForm içinde, bugünden önceki bir tarihi The date cannot be in the past. mesajıyla reddet. Bugün tarihli bir etkinlik uygundur.

Dünün tarihini taşıyan, 2026-10-30 biçiminde yazılmış bir etkinlik ekle: The date cannot be in the past. mesajını görürsün.

Kendin dene

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)

Formlar bölümündeki tüm dersler

Kendi başına pratik yap: Django playground