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 usernameis_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.
Görev
KolayEventForm 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
2Django Formları
Bir Django FormuForm ÇizimiKendi başına pratik yap: Django playground