오류 발생
[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 정보가 들어가지 않는 것을 알 수 있다.