본문 바로가기
Python/Python FAQ

Python Django에서 null=True와 blank=True의 차이점은 무엇인가요?, What is the difference between null=True and blank=True in Django?

by 베타코드 2023. 5. 25.
반응형

질문


장고에서 모델 필드를 추가할 때는 일반적으로 다음과 같이 작성합니다:

models.CharField(max_length=100, null=True, blank=True)

ForeignKey, DecimalField 등에도 동일하게 적용됩니다. 다음 중에서:

  1. null=True
  2. blank=True
  3. null=Trueblank=True

다른 (CharField, ForeignKey, ManyToManyField, DateTimeField) 필드에 대해 각각 어떤 차이가 있으며, 옵션 1, 2 또는 3을 사용하는 장단점은 무엇인가요?


답변


null=True은 DB에서 해당 열을 NULL (대신 NOT NULL)로 설정합니다. DateTimeField 또는 ForeignKey와 같은 Django 필드 유형의 빈 값은 DB에 NULL로 저장됩니다.

blank는 필드가 양식에서 필수인지 여부를 결정합니다. 이는 관리자 및 사용자 지정 양식을 포함합니다. blank=True이면 필드가 필수가 아니며, False이면 필드가 비어 있을 수 없습니다.

두 가지의 조합은 자주 사용됩니다. 왜냐하면 양식에서 필드를 비워 둘 수 있게 허용하려면 데이터베이스도 해당 필드에 대해 NULL 값을 허용해야 하기 때문입니다. 예외는 CharFieldTextField이며, 이러한 필드는 Django에서 절대 NULL로 저장되지 않습니다. 빈 값은 DB에 빈 문자열 ('')로 저장됩니다.

몇 가지 예:

models.DateTimeField(blank=True) # 비어 있으면 IntegrityError 발생

models.DateTimeField(null=True) # NULL 허용, 그러나 양식에서 작성해야 함

물론 이러한 두 가지 옵션은 논리적으로 사용할 수 없습니다 (하지만 셸을 통해 객체를 처리할 때 필드를 항상 양식에서 필요로하는 경우 null=True, blank=False와 같은 사용 사례가 있을 수 있음).

models.CharField(blank=True) # 문제 없음, 빈 값은 ''로 저장됨

models.CharField(null=True) # NULL 허용, 그러나 NULL로 설정되지 않음

CHARTEXT 유형은 Django에서 NULL로 저장되지 않으므로 null=True은 필요하지 않습니다. 그러나 이러한 필드 중 하나를 수동으로 None으로 설정하여 강제로 NULL로 설정할 수 있습니다. 이러한 상황이 필요한 시나리오가 있다면 여전히 null=True을 포함해야 합니다.

반응형

댓글