모델 필드 정의시 언제 널을 쓰고 언제 공백을 쓸 것인가
프로젝트 진행시 null=True에 대한 오류를 많이 접했고, Foreign key로 지정한 값을 blank=True로 먼저 넣은 후 값을 update할 일이 생겼다. 과연 어느 필드에는 null=True, blank=True가 권장되지 않은 필드는 무엇일까 정리해보려고 한다.
이 글은 Two Scoops of Django를 보며 작성했다.
필드 타입 | null=True로 설정하기 | blank=True로 설정하기 |
CharField, TextField, SlugField, EmailField, CommaSeparatedIntegerField, UUIDField |
X 장고 표준은 빈 값(empty value)을 빈 문자열(empty string)로 저장하는 것이다. 일관성을 위해 널값 또는 빈 값을 빈 문자열에 대해 반환하도록 한다. |
O 위젯이 빈 값을 허용하기를 원한다면 설정한다. 이렇게 설정하면 데이터베이스에서는 빈 값이 빈 문자열로 저장된다. |
FileField, ImageField | X 장고는 MEDIA_ROOT의 경로를 CharField에 파일 또는 이미지로 저장한다. 따라서 같은 패턴이 FileField에도 저장된다. |
O CharField에 적용된 것과 같은 규칙이 적용된다. |
BooleanField | X 대신 NullBooleanField를 이용한다. |
X |
IntegerField, FloatField, DecimalField, DurationField 등 |
해당 값이 데이터베이스에 NULL로 들어가도 문제가 없다면 이용한다. | 위젯에서 해당 값이 빈 값을 받아와도 문제가 없다면 이용한다. 그럴 경우 null=True와 같이 이용한다. |
DateTimeField, DateField, TimeField 등 | 데이터베이스에서 해당 값들을 NULL로 설정하는 게 가능하다면 이용한다. | 위젯에서 해당 값이 빈 값을 받아와도 문제없다거나 auto_now나 auto_now_add를 이용하고 있다면 이용한다. 그럴 경우 null=True와 같이 이용한다. |
ForeignKey, ManyToManyField, OneToOneField |
데이터베이스에서 해당 값들을 NULL로 설정하는 게 가능하다면 이용한다. | 위젯에서 해당 값(예로 들어 셀렉트 박스)이 빈 값을 받아 와도 괜찮다면 이용한다. |
GenericIPAddressField | 데이터베이스에서 해당 값들을 NULL로 설정하는 게 가능하다면 이용한다. | 위젯에서 해당 값이 빈 값을 받아와도 괜찮다면 이용한다. |
IPAddressField | X | X |
'컴퓨터 > Django' 카테고리의 다른 글
ajax로 넘긴 json 형식을 django에서 저장하기 (0) | 2022.08.02 |
---|---|
모델 ForeignkeyField의 on_delete 옵션 정리 (0) | 2022.07.15 |
Q객체 (0) | 2022.07.12 |