필드 하나 검사하기
Coddy Django 여정의 폼 섹션에 포함된 레슨. 20개 중 10번째.
이 양식은 작년 날짜의 이벤트를 허용합니다. Django에 내장된 검사는 유형과 제한은 알지만, 사이트의 규칙은 알지 못합니다. 한 필드에 적용할 고유한 규칙은 clean_에 필드 이름을 붙인 메서드에 작성합니다. 스태프를 위해 admin이라는 이름을 사용할 수 없도록 하는 가입 양식은 다음과 같습니다.
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()는 필드 자체의 검사가 끝난 다음 이 메서드를 호출하므로, 값은 이미 변환되어 있습니다. DateField는 날짜를 반환합니다. forms.ValidationError를 발생시키면 해당 필드가 거부되고, 오류 메시지가 필드 옆에 표시됩니다.
메서드는 반드시 값을 반환해야 합니다. 반환된 값은 cleaned_data에 저장됩니다. return이 없으면 값은 None이 됩니다.
챌린지
쉬움EventForm에서 오늘보다 이전 날짜는 The date cannot be in the past.라는 메시지와 함께 거부하세요. 오늘 날짜의 이벤트는 괜찮습니다.
어제 날짜로, 2026-10-30처럼 입력해 이벤트를 추가하면 The date cannot be in the past.가 표시됩니다.
직접 해보기
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)
폼의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드