장고에서 DB table이 꼬이면, ㄹㅇ 개노답인 상황이 생긴다. 특히, 어디서부터 table이 생긴건지, 어디서부터 없는건지 파악할 수 없기때문에 진짜 말그대로 sqlite3에 직접들어가서 확인해보는 것과 같은 방식으로 찾는 것도 있다.
그리고 장고 자체 버그인지 아니면 내가 장고에 대한 이해도가 떨어지는지는 모르겠는데 modeling을 바꾸고 난다음 python manage.py makemigrations 과 python manage.py migrate 후에 modeling이 재대로 적용되지 않는 이상한 버그가 있는 듯하다.
특히, migration을 날리고 난다음에 table은 있는 경우 오히려 테이블은 이전 모델이라 재대로 key가 적용이 안되는 이상한... 별의 별 상황을 다 겪었다.
즉, 요약해보자면
- modeling이 변경되면 migration이 잘 변경됨
- 하지만 가끔 migration을 그냥 물리적으로 파일을 없에버리면, makemigrations 혹은 migrate을 통해서 직접 테이블이 변경되지 않는 이상한 버그가 있다.
- 또 거기에 직접 SQLite3에 들어가서 테이블을 삭제하고 다시 migrate작업을 해도 다시 테이블이 생성되지 않아서 난감.
이런 버그를 해결하는 방법은 다음과 같다.
- 해당 앱에 있는 migrations 폴더안의 init.py 파일을 제외하고 모두 삭제하기!
- database에 직접 접속하여 테이블 중 django_migrations 라는 테이블에서 해당 앱에 대한 raw를 삭제.
DELETE FROM django_migrations WHERE app = '앱 이름'
- python3 manage.py makemigrations // python3 manage.py migrate 수행 하면 해결