본문 바로가기

Python/Django

[Error solved][Django+PostgreSQL] Django model 변경 후 기존 DB table 변경하기 / 오류: video_video.author_id 칼럼 없음

오류 발생

[Django] django model과 User 연결시키기 / 해당 model을 인스턴스화한 user만 model을 delete할 수 있게 하기

Django model의 field값 추가 후, migration까지 새로 했음에도 다음과 같은 오류가 났다

오류 내용


해결 방법

migrations 디렉토리를 로컬에서 삭제해도, 실제 DB에 django_migrations라는 테이블로 저장되어 있다는 것을 알게 됐다.

 

pgAdmin4을 실행하고, django_migrations 테이블을 확인해해보니, migrate 명령이 반영이 되지 않은 것을 볼 수 있다.

그래서, 강제로 로컬 프로젝트 앱 폴더 내의 migration 파일을 강제로 DB에 푸시할 방법을 찾았다.

How To Force Reset Django Models Migrations

> python manage.py migrate <app_name> zero

다시 migrations 폴더 내 파일을 모두 지우고

> python manage.py makemigrations <app_name>
> python manage.py migrate

그러면 다음과 같이 migration이 반영된다!

[Option] 해결 (실패) 과정

일단, pgAdmin4 를 실행시켜서 확인해보았다.

video_video 테이블에 새로 추가한 author field가 없는 것을 알 수 있다.

 

직접 DB에 column을 추가해보았다.

> ALTER TABLE <table name> ADD <column name> <data type>

column name은 위의 오류를 통해 author_id인것을 확인했고,

나의 경우, 추가한 field는 models.ForeignKey였는데,

author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

django에서 자동적으로 할당하는 user값은 string이고, postgreSQL에서 VARCHAR data type이다.[참고]

 

최종적으로, djangotube database에서 다음 쿼리를 날려보았는데,

> ALTER TABLE video_video ADD author_id VARCHAR

다음과 같이 author_id에 제대로 user 정보가 들어가지 않는 것을 알 수 있다.

엉엉ㅜㅜ