class User(models.Model):
username = models.CharField(max_length=20, unique=True)
age = models.PositiveIntegerField()
필드 속성검사 내용
max_length
DB에서 에러 발생 전에 폼에서 차단
unique=True
중복 저장 불가 (DB + 폼 수준에서도 검사됨)
null=False, blank=False
공백 입력 불가 (폼 + DB 모두)
PositiveIntegerField
0보다 작은 값 거부
3. 폼 클래스에서 제공하는 기본 유효성 검사기
UserCreationForm, AuthenticationForm 등에서는 다음이 자동 적용됨:
검사 항목설명
비밀번호 길이 (MinimumLengthValidator)
기본 8자 이상
사용자 정보와 유사 여부 (UserAttributeSimilarityValidator)
username/email과 비슷한 비번 거부
숫자/문자 혼합 (CommonPasswordValidator, NumericPasswordValidator)
단순하거나 숫자만인 비밀번호 거부
4. ModelForm 사용 시 자동 처리되는 것들
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = "__all__"
모델의 모든 제약 조건 (unique, blank, choices, max_length, ...)이 자동 반영돼서 유효성 검사됨
관리자 페이지에서도 그대로 적용됨
5. clean_<fieldname>() / clean() 메서드 활용 가능
def clean_username(self):
val = self.cleaned_data['username']
if 'admin' in val:
raise forms.ValidationError("사용자 이름에 'admin'은 포함할 수 없습니다.")
return val