TIL/Django

TIL.57 null=True 와 blank=True 의 차이(Django)

codermun 2020. 12. 5. 15:26
728x90
반응형

Django에서 Model을 구성할때

null=True 와 blank=True 의 차이는 뭘까?

null  blank 는 둘 다 기본값이 False 입니다.

이 두 설정은 모두 필드(열) 수준에서 동작합니다.

즉, 필드(열)를 비워두는 것을 허용할 것인지를 설정합니다.

null=True 는 필드의 값이 NULL(정보 없음)로 저장되는 것을 허용합니다. 결국 데이터베이스 열에 관한 설정입니다.

date = models.DateTimeField(null=True)

 

blank=True 는 필드가 폼(입력 양식)에서 빈 채로 저장되는 것을 허용합니다. 장고 관리자(admin) 및 직접 정의한 폼에도 반영됩니다.

title = models.CharField(blank=True) # 폼에서 비워둘 수 있음. 데이터베이스에는 ''이 저장됨.

null=True  blank=True 를 모두 지정하면 어떤 조건으로든 값을 비워둘 수 있음을 의미합니다. (맨아래내용 반드시 참조)

# 단, CharFields()와 TextFields()에서는 예외입니다.

epic = models.ForeignKey(null=True, blank=True)  
# 장고는 이 경우 NULL을 저장하지 않으며, 빈 값을 빈 문자열('')로 저장합니다.

 

이처럼 장고 모델 API는 null 과 blank 비슷한 옵션을 제공한다

  • Null : DB와 관련되어 있다. (database-related) 주어진 데이터베이스 컬럼이 null 값을 가질 것인지 아닌지를 정의한다.
  • Blank : 유효성과 관련되어 있다. (validation-related) form.is_valid()가 호출될 때 폼 유효성 검사에 사용된다.

위에서 null=True  blank=True 를 모두 지정하면 어떤 조건으로든 값을 비워둘 수 있다고 하였지만

많은 개발자들이 실수하는 부분이 CharField, TextField와 같은 문자열 기반 필드에 null=True를 정의하는 것이다.

이 같은 실수를 피해야한다.

그렇지 않으면 “데이터 없음”에 대해 두 가지 값, 즉 None  빈 문자열 을 갖게된다.

즉 데이터가 없으면 없는거지 None으로 없는것과 빈 문자열로 없는것이 중복이 된다.

“데이터 없음”에 대해 두 가지 값을 갖는 것은 중복이다.

그리고 무엇보다 Null이 아닌 빈 문자열을 사용하는 것이 장고 컨벤션이다.


만약 문자열 기반의 Model Field를 '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를 넣을 수 있다.)

 

또 하나 예외적인 경우가 있습니다. 불리언 필드(BooleanField)에 NULL을 입력할 수 있도록 하려면 null=True 를 설정하는 것이 아니라, 널 불리언 필드(NullBooleanField)를 사용해야 합니다.

 

출처 : django-orm-cookbook-ko.readthedocs.io/en/latest/null_vs_blank.html

 

10. null=True 와 blank=True 의 차이가 무엇인가요? — Django ORM Cookbook 2.0 documentation

10. null=True 와 blank=True 의 차이가 무엇인가요? null 과 blank 는 둘 다 기본값이 False 입니다. 이 두 설정은 모두 필드(열) 수준에서 동작합니다. 즉, 필드(열)를 비워두는 것을 허용할 것인지를 설정합

django-orm-cookbook-ko.readthedocs.io

출처 : wayhome25.github.io/django/2017/09/23/django-blank-null/

 

(번역) Django Tips #8 Blank or Null? · 초보몽키의 개발공부로그

(번역) Django Tips #8 Blank or Null? 23 Sep 2017 | django model blank field migration 장고를 공부하면서 많은 도움을 받고 있는 simple is better than complex의 Django Tips #8 Blank or Null? 번역글입니다. 기분좋게 선뜻 번역

wayhome25.github.io

 

728x90
반응형