웹 프로그래밍

[Django Error] circular dependency

Platypus 2021. 10. 18. 14:53
728x90
반응형

ImportError: cannot import name 'User' from partially initialized module 'accountapp.models' (most likely due to a circular import)


Circular dependency

코드가 점점 커지다 보니 의존성문제가 발생하기 시작했다. models.py 사이에서 import로 얽힌 연관성이 무한하게 반복된 것이다. django가 import를 무한하게 반복하게 되어 발생하는 문제다.
특히 foreign key 관계에서 자주 발생한다. 

 

예를 들어 방금의 경우엔 from accountapp.models import User 여기서 에러가 발생했다.
이런경우엔 지워주고 import accountapp 만 해준후에
원래라면 모델에서 User로 넣어줬을 것을 accountapp.User 이런식으로 넣어주면 된다. 해당모델을 필요시에만 임포트해오기 때문에 circular dependency 문제를 피할 수 있다.

Foreign key 를 사용할때는 습관적으로 이렇게 작성해주자. 당장에 문제가 없더라도 이런 문제는 언제든 발생할 수 있다. 

 

* 이렇게해도 문제가 생기는 경우가 있다.

예를 들어 accountapp에 User라는게 없다고 에러를 내는 경우이다. 해당 경우엔 콜론을 씌워주면 해결된다. 이유는 모르고 이런 문법에 대해서도 검색결과를 딱히 찾지 못하기도 했지만 어찌되었든 내 경우엔 그렇게 했더니 해결되었다. 
ex) accountapp.User -> 'accountapp.User'

728x90
반응형