CharField와 TextField에서의 null=True

김지용·2022년 6월 9일
0

예전에 쿼리셋을 꺼내올 때 값이 안나올 때 get은 에러가 나도 filter는 빈값으로 들어왔던 문제가 있었었다.

object.get은 무조건 하나를 받아야한다. 안 그러면 에러가 난다.
object.filter는 빈값부터 여러개 ( 오브젝트들의 집합 = 쿼리셋으로 나옴 )
오브젝트로 나오려면
1. get을 쓰던가
2. filter 뒤에 [0] 인덱스를 붙여서 뽑아주던가
3. for 문을 돌려서 하나씩 꺼내던가.

이때 모델필드에서 null=True, blank=True 를 고민했던 적이 있었다.


Django에서 필수필드로 만들지 않기 위해 보통은 null=True, blank=True로 두는 경우가 많다. 보통은 문제가 없지만, 문자열 기반 필드인 CharField / TextFieldnull=True를 지정하지 않는 게 좋다고 한다.(누가? 장고가)

즉, 문자열과 관련된 필드들은 null=True를 안 쓰는 게 권장된다. (아래 필드들 참조)

  • CharField
  • TextField
  • SlugField
  • EmailField
  • CommaSeparatedIntegerField
  • UUIDField
  • ...

Django 기본은 빈 값을 빈 문자열로 저장하는 거다.
일관성을 위해 null값과 빈 값을 빈 문자열을 통해 저장하는 것이다.


자주 사용하는 CharField, TextField에 대해서는 null=True는 피하는 것이 좋다. 해당 필드가 필수일 필요가 없으면 blank=True를 사용하면 된다. 이렇게하면 DB에서는 빈 값이 빈 문자열 ' '으로 설정되서 null과 빈 값을 빈 문자열으로만 판단할 수 있게 된다는 장점을 가질 수 있다.

profile
김죵입니당 ^^

0개의 댓글