hanbin.dev

[Django] 변경사항이 없어도 makemigrations가 가능한 오류 본문

겪었던 오류

[Django] 변경사항이 없어도 makemigrations가 가능한 오류

hanbindev 2021. 3. 17. 10:35

프로젝트를 진행하면서 변경사항이 없어도 계속 makemigrations가 가능해 migration 파일이 계속 생성되는 오류가 발생했다.

 

이유를 생각해 보니 role 필드의 choices 옵션이 떠올랐다.

ROLE_CHOICES = {  # <- set!
        (STUDENT, "student"),
        (TEACHER, "teacher"),
        (ADMIN, "admin"),
}

role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES)

위와 같이 ROLE_CHOICES를 set 자료형으로 만들었는데, 파이썬의 set 자료형은 순서가 존재하지 않는다.

migrations/0001_initial.py

그래서 migration 파일을 보면 status의 choices 옵션이 makemigrations 할때마다 이것만 바뀐 파일이 생성되는 것을 알 수 있다.

 

결론은 set 자료형이 아닌 tuple 혹은 list 자료형을 사용해주면 된다

ROLE_CHOICES = (  # <- tuple!
        (STUDENT, "student"),
        (TEACHER, "teacher"),
        (ADMIN, "admin"),
)

role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES)