✅ Django 모델 필드 설정: null=True 와 blank=True 차이 완벽 정리
Django에서 모델을 정의할 때 자주 사용되는 옵션인 null과 blank. 이 둘은 비슷해 보이지만 실제로는 적용되는 대상과 의미가 완전히 다릅니다.
🔍 핵심 요약
옵션 의미 적용 대상 실제 동작 방식
null=True | DB에서 NULL 허용 | 데이터베이스 | 값이 없어도 DB에 NULL로 저장 가능 |
blank=True | 폼 입력에서 빈칸 허용 | Django 폼 시스템 | 폼에서 필수값이 아니게 됨 (validation 통과) |
💡 예제: ImageField 설정
image = models.ImageField('이미지', null=True, blank=True, upload_to='blog/%Y/%m/%d')
🔹 null=True:
- 해당 필드가 DB에서 NULL 값을 가질 수 있음
- 즉, 이미지를 올리지 않아도 DB 저장이 가능
🔹 blank=True:
- 폼에서 필수 입력값이 아님 (관리자 페이지, ModelForm 등)
- 사용자가 이미지를 첨부하지 않아도 제출 가능
➡️ 즉, DB와 폼 모두에서 비워도 되는 필드로 설정한 것
⚠️ 자주 하는 실수
필드 타입 null 설정 blank 설정 권장 여부 설명
CharField | ❌ null=True | ✅ blank=True | ✅ 추천 설정 | 빈 문자열로 처리하는 게 일관성 있음 |
TextField | ❌ null=True | ✅ blank=True | ✅ 추천 설정 | DB에서 NULL보다 빈 문자열이 낫다 |
ImageField | ✅ null=True | ✅ blank=True | ✅ 둘 다 필요 | 파일이 없을 수 있기 때문에 둘 다 필요 |
ForeignKey | ✅ null=True | ✅ blank=True | ✅ 둘 다 필요 | 관계 없는 상태를 허용할 수 있음 |
🧠 정리 한줄 요약
- null=True → DB에서 NULL 허용 (서버/데이터베이스 관점)
- blank=True → 폼에서 빈칸 허용 (사용자 입력/폼 검증 관점)
→ 둘 다 True로 설정하면, DB 저장과 폼 입력 모두 비워도 OK!
🔧 실전 팁
- CharField, TextField는 blank=True만 주자 → NULL보다 빈 문자열이 낫다
- ImageField, FileField, ForeignKey는 null=True, blank=True 같이 쓰자
- 관리자 페이지와 Form을 같이 쓴다면 blank는 필수 고려사항이다
필드 설정 하나 차이로 예상치 못한 DB 오류나 폼 validation 에러가 발생할 수 있습니다.
폼과 DB 각각의 관점에서 이 옵션을 이해하고 사용하는 것이 중요합니다.
'기술블로그-Django편' 카테고리의 다른 글
💡 SQL 쿼리와 ORM의 차이점 완전 정복! (0) | 2025.05.13 |
---|---|
🔐 SHA-256 복호화? 가능한가요? (0) | 2025.05.12 |
✅ Django에서 사용자(User) 모델을 설정하는 3가지 방법과 사용법 정리 (0) | 2025.05.12 |
[Python 개발 필수 3대 도구 비교 정리: venv, pyenv, poetry] (0) | 2025.05.12 |
📌 IP 주소와 Port란? 인터넷 통신의 핵심 개념 시각화 정리 (0) | 2025.05.12 |