일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- PYTHON
- django ORM
- es6
- java
- c++
- DRF
- form
- javascript
- 알고리즘 풀이
- 백준
- API
- 파이썬
- CSS
- Django
- django widget
- web
- react
- 알고리즘 연습
- 장고
- HTML
- MAC
- AWS
- Baekjoon
- django rest framework
- Algorithm
- 파이썬 알고리즘
- Git
- 알고리즘 문제
- js
Archives
- Today
- Total
수학과의 좌충우돌 프로그래밍
[Django] Model Field의 Null vs Blank 본문
django에서는 기본적으로 orm을 지원해주고 있습니다. 따라서 테이블을 생성할 때도 orm으로 생성할 수 있습니다. 테이블을 생성하다보면 필드 옵션으로 null와 blank 속성이 존재하고 이는 꽤나 헷갈리는 내용입니다. 따라서 이번 포스팅에서는 각각에 대해 알아보도록 하겠습니다.
Null vs Blank
Null
은 데이터베이스와 관련되어 있습니다. 기본값은 false로 Null
을 허용하지 않으며, True로 할 시에는 데이터베이스에 Null
값을 저장할 수 있습니다.
Blank
는 유효성과 관련되어 있습니다. 기본값은 false로 해당 필드 없이 저장하고자 하면 유효성 검사에서 걸러지며, True로 할 시에는 해당 필드가 없어도 정상적으로 동작합니다.
다음과 같은 모델을 만들고 이에 대한 쿼리를 확인한 결과 아래와 같았습니다.
DB는 mysql 8 버전을 사용하였습니다.
class NullBlank(models.Model):
nothing = models.TextField()
null_only = models.TextField(null=True)
blank_only = models.TextField(blank=True)
both = models.TextField(null=True, blank=True)
CREATE TABLE `plant_nullblank` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nothing` longtext NOT NULL,
`blank_only` longtext NOT NULL,
`both` longtext,
`null_only` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
다음 결과와 같이 Blank
는 데이터베이스에 아무런 영향을 주지 않는 것을 확인할 수 있습니다.
그리고 위의 테이블 정의는 해당 필드에서 한 가지 문제점이 생깁니다.
null_only = models.TextField(null=True)
문자열 기반 필드에는 Null
을 True로 설정할 경우 문제가 생깁니다. Null
이 의미하는 데이터없음 을 문자열에서는 빈 문자열로 표현할 수 있기 때문이죠. 즉, 데이터없음 에 대해서 두 가지 값을 중복하여 가지게 되므로 Null
이 아닌 빈 문자열로 표현하는 것을 django에서 권유하고 있습니다.
'웹프로그래밍 > Django' 카테고리의 다른 글
[Django] Logging 설정 및 SQL 쿼리 확인 (0) | 2020.08.15 |
---|---|
[Django] AWS, S3를 이용한 이미지 업로드 (0) | 2020.08.12 |
[Django] Django 2.2 mysql 8 버전 연동하기 (0) | 2020.08.02 |
[Django] 웹서버, Nginx 사용하기 (0) | 2020.06.19 |
[Django] WSGI 중 uWSGI를 통해 django 실행 (0) | 2020.06.19 |
Comments