-
[Django] app에 컬럼 추가하기파이썬/Django 2022. 12. 27. 20:34728x90반응형
user app 모델에 컬럼 추가하기
📁 uesrs/models.py
from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): # 성과 이름으로 분류하는 것은 서구적인 정보 입력 방식이기 때문에 관리자 페이지에서 보이지 않도록 설정한다. editable=False first_name = models.CharField(max_length=150, editable=False) last_name = models.CharField(max_length=150, editable=False) # 이름 입력창 name = models.CharField(max_length=150, default="") # 유저가 호스트일 경우 is_host = models.BooleanField()
새로 생성할 컬럼 정보를 적어주고 아래 명령어를 통해 마이그레이션을 생성한다.
python manage.py makemigrations
그럼 아래처럼 에러가 뜨고 어떻게 할 것인지 1번과 2번을 제시할 것이다.
It is impossible to add a non-nullable field 'is_host' to user without specifying a default. This is because the database needs something to populate existing rows. Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit and manually define a default value in models.py.에러가 발생한 이유는 데이터베이스 기존 행에 입력시킬 데이터가 필요하기 때문이다.
해결책 1) 당장 일회성의 기본값 제공하기
이것은 기존 행들의 이 컬럼 값이 모두 null로 들어가는 것을 의미한다.
해결책 2) 작업을 중지하고 models.py에 기본값 지정하기
에러가 난 원인은 이 문구 때문이다.
is_host = models.BooleanField()
models.BooleanField() 는 null이 될 수 없는 non-nullable 필드이다. (true 이건 false 이건 기본값이 있어야 함)
default값 설정해주기
여기서 default값은 기존에 있던 데이터에 대해 새로 만드는 컬럼 값의 기본값을 지정해준다.
해결 방법은 두 가지가 있는데 먼저 default=False 를 해주거나 null=True 라고 지정해주는 것이다.
1. 기본값을 false로 지정해주기
is_host = models.BooleanField(default=False)
2. null 상태가 가능하도록 설정해주기
is_host = models.BooleanField(null=True)
LIST'파이썬 > Django' 카테고리의 다른 글
[Django] 모델 간 데이터 연결하는 방법, 외래키(FK) 사용하기 (0) 2022.12.27 [Django] 어드민 페이지 커스텀하기 (0) 2022.12.27 [Django] 사용자 app 생성하기 _Mac (0) 2022.12.27 [Django] app(폴더) 및 model 만들기 (0) 2022.12.07 [Django] 프레임워크 vs 라이브러리 (0) 2022.12.07