Django에서 mysql을 연동한 상태에서
makemigrations을 진행하고 migrate를 진행할 때 이러한 오류가 발생했다.
mysql.connector.errors.integrityerror: 1452 (23000): cannot add or update a child row: a foreign key constraint fails
검색해 보니 참조 무결성에 어긋났기 때문에 migrate를 진행할 수 없다고 했다.
일단 원인은 다음과 같다.
1. A라는 model이 B를 fk로 참조한다.
2. B라는 model이 C를 fk로 참조한다.
3. 이때 A라는 모델이 추가로 C를 fk로 참조하는 경우, 문제가 발생하게 된다.
이 모델을 참조하는 것 자체는 문제가 발생하지 않으나 a(A의 object)가 참조하는 b(B의 object)에 대해 또 다시 b가 참조하는 c(C의 object)가 있다고 할 때 새롭게 A에 추가되는 C라는 field는 무조건 b가 참조하는 것과 동일한 c를 참조해야 한다는 것이다.
이무 생각 없이 fk field를 추가하고 default 값을 임의로 설정했기 때문에 이러한 문제가 발생하게 되었다.
했던 시도들
1. default 값을 변경해주고 다시 makemigrations를 진행했다.(실패)
2. field 자체를 삭제했다.(실패)
결론
바보 같은 짓을 많이 했는데 그냥 makemigration을 취소하고 field를 blank=True null=True로 설정해준 다음에 새롭게 makemigration을 진행하면 된다.
makemigration을 취소하는 법은 다음 글을 통해 확인할 수 있다.
2021.10.21 - [개발/django] - [Django] makemigrations 취소하기, migrate 취소하기