장고 에러 모음집
2022. 4. 23. 01:11
Model & DB
Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`vanilla`.`#sql-1c10_73`, CONSTRAINT `document_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `_user` (`id`))
- FK로 사용되는 필드가 바뀌거나 추가된 경우
- 새로 추가된 필드에 값을 채워줘야 함(안 그러면 참조 무결성을 위반)
- table자체를 삭제하고 새로 만드는 것을 추천
모델필드를 migrate까지해서 테이블을 만듬 >> db에서 테이블을 삭제하고, 장고에서도 makemigrations를 삭제하고 나서 다시 migrate를 해도 db에서 테이블이 생성되지 않음
- db의 django_migration에 이미 생성한 이력이 남아있다보니, 장고에서 따로 만들지 않는 것임(만들었다고 생각하므로)
- https://sundries-in-myidea.tistory.com/84
순환 참조(circular import)
- 다른앱의 모델들이 서로를 참조할 때 발생 ex)
- A앱의 a모델을 생성할 때, B앱의 b모델을 참조하므로 A앱의 models.py에서 b모델을 import
- 동시에 B앱의 b모델을 생성할 때 A앱의 a모델을 참조하므로, B앱의 models.py에서 a모델을 import
- 특히 many to many필드를 선언해줄 떄 많이 발생한다
- 해결책
- 장고모델에서는 참조하려는 모델을 적어줄 때 '앱이름.테이블'과 같은 식으로 적어줄 수 있다. 이렇게 하면 import 자체가 필요가 없어져서, 순환참조의 문제를 해결할 수 있다.
- 다음과 같이 참조하려는 테이블을 '앱이름.테이블명'과 같이 적어준다. 그렇게 하면 다른 앱의 테이블을 import할 필요조차 없어서 순환참조의 문제가 해결이 됨
- 심지어 장고에서도 순환참조를 막기 위해 위의 사진처럼 str형태로 테이블을 참조하는 것을 권유함
AttributeError: 'str' object has no attribute '_meta'
- makemigrations에서는 문제가 없엇음. migrate를 할 때 문제가 발생
- 정확한 이유는 모르겠으나, many to many 필드부분에서 문제가 발생하는 것을 확인함. 실제 Db에서도 테이블의 manytomany필드 이전까지는 생성되고, manytomany필드에서 문제가 생겨서 해당 필드가 생성되지 않음을 확인
- 해결책
- manytomany필드 혹은, 다른필드를 복잡하게 참조하는 것처럼 보여지는 필드를 주석처리를 한후 makemigrations를 실행 > migrate > 그후에 주석처리를 제거하고 makemigrations를 다시 실행 > migrate도 다시 실행
- 다른 필드를 참조하지 않는 필드와 테이블이 먼저 만들어졌고, 만들어진 필드와 테이블을 바탕으로 many to many필드가 순차적으로 선언되기 때문에 별다른 에러가 발생하지 않는것으로 추측됨. 정확한 이유에 대해서는 안나옴
makemigraton실행시 no changes detected
- 아마 settings.py에서 installed app이 등록되지 않았을 가능성이 높다
- 나는 git으로 왓다갓다하면서 settings에서 installed_app에 추가한 새앱들이 다 날라갔었음
- 참고)https://snepbnt.tistory.com/251
'django > basic' 카테고리의 다른 글
Software testing : Unittest in Django (0) | 2022.05.12 |
---|---|
API 서버와 REST (0) | 2022.04.28 |
회원가입,로그아웃 // 장고 기본인증(2) (0) | 2022.04.19 |
로그인처리(LoginView) , 프로필 수정 // 장고 기본인증(1) (0) | 2022.04.19 |
Generic editing views // Forms(6) (0) | 2022.04.18 |