Django blank, null
장고 모델 API는 많은 개발자들이 헷갈려하는 null 과 blank 라는 2가지 비슷한 옵션을 제공한다
Null
: DB와 관련되어 있다. (database-related) 주어진 데이터베이스 컬럼이 null 값을 가질 것인지 아닌지를 정의한다.
Blank
: 유효성과 관련되어 있다. (validation-related) form.is_valid()가 호출될 때 폼 유효성 검사에 사용된다.
null=True, blank=False 옵션을 가진 필드를 정의하는 것에는 문제가 없다.
이는 DB레벨에서는 해당 필드가 NULL 될 수 있지만, application 레벨에서는 required 필드인 것을 의미한다.
하지만 여기서 주의해야할점은 CharField, TextField와 같은 문자열 기반 필드에 null=True를 정의하는 것이다
위와 같은 방식으로 사용하게 되면 None 과 빈 문자열 을 갖게된다.
“데이터 없음”에 대해 두 가지 값을 갖는 것은 중복이다. 그리고 Null이 아닌 빈 문자열을 사용하는 것이 장고 컨벤션이다.
만약 문자열 기반 모델 필드를 “nullable” 하게 만들고 싶다면 다음과 같이 하면된다.
class Person(models.Model):
name = models.CharField(max_length=255) # 필수
bio = models.TextField(max_length=500, blank=True) # 선택 (null=True를 넣지 말자)
birth_date = models.DateField(null=True, blank=True) # 선택 (여기서는 null=True를 넣을 수 있다.)
출처 : https://wayhome25.github.io/django/2017/09/23/django-blank-null/