Django migrations error를 올바르게 해결하기
Django migrations error를 올바르게 해결하기
마이그레이션 에러가 발생했습니다.
무작정 migrations 파일을 지우지 말고 해결해 보아요!
Conflicting migrations detected; multiple leaf nodes in the migration graph
CommandError: Conflicting migrations detected; multiple leaf nodes in the migration graph:
(0002_faq_alter_applicant_certificate_and_more, 0009_alter_meeting_user in recruit;
0002_remove_portfolio_problem_remove_portfolio_solution_and_more, 0015_alter_portfoliosubject_portfolio in portfolio;
0002_gallery_setting_delete_gallary_and_more, 0012_alter_setting_last_recruit_end_day_and_more in main).
To fix them run 'python manage.py makemigrations --merge'
이런 오류가 발생했습니다.
보아하니, recruit app에서는 두 개의 파일이, portfolio 앱에서도 두 개의 파일이, main 앱에서도 두 개의 파일이 충돌하고 있네요.
leaf node가 여러 개라고 하는 것을 보니 migrations 파일들이 서로 연결이 되어 있나봐요.
migrations 파일을 자세히 보면 위에 dependencies
가 존재합니다.
class Migration(migrations.Migration):
dependencies = [
('main', '0002_alter_curriculum_created_at_and_more'),
]
...
번호 순서대로 skewed tree처럼 일렬로, 순서대로 연결되어 있어요.
그런데 중간에 갈라지는 파일이 생겨 버리면 저런 오류가 발생합니다.
따라서 중간에 갈라지는 파일만 삭제하면 됩니다.
위 이미지에서는 0002_remove_portfolio...
파일이죠!
init 파일만 남기고 다 지우세요?
라는 글이 많이 보입니다.
이런 경우 데이터베이스 자체도 다 날려야 하는 상황이 발생할 수 있습니다.
함부로 삭제하면 안 돼요!!
저는 데이터베이스를 삭제할 수 없었으므로 migrations 파일을 최대한 보존해야 했어요.
model 파일 내부 함수를 제거하게 되어도
migrate에서 오류가 발생할 수 있습니다.
models.py 파일 안에서만 사용하는 함수인 upload_to_func
를 제거했는데, migrations 파일에서 해당 함수를 찾을 수 없어서 발생하는 문제인데요.
이런 경우 migartions 파일 전체를 삭제하지 않고, migrations 파일 안에서 해당 함수를 사용하는 부분을 모두 변경해 주어도 됩니다.
참고
마지막 수정일자