ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] app에 컬럼 추가하기
    파이썬/Django 2022. 12. 27. 20:34
    728x90
    반응형

    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
Designed by Tistory.