기술블로그-Django편

✅ Django 모델 필드 설정: null=True 와 blank=True 차이 완벽 정리

Chansman 2025. 5. 12. 17:11

✅ 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 각각의 관점에서 이 옵션을 이해하고 사용하는 것이 중요합니다.