less than 1 minute read

장고 모델 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/

Categories:

Updated: