TIL-20210128
Django circular import 해결방법
상황
A앱에서 B앱에 있는 모델중 하나를 가져오고, B앱에서도 A앱의 모델중 하나를 가져오는 상황
A를 import를 하기 위해서 B가 필요하고 B를 import 하기 위해서 A가 필요한 경우 circular import 에러가 발생한다
# A.model.py
from B.models import B
class AMODEL(models.Model):
a_field = models.Forignkey(BMODEL, ..)
# B.model.py
from A.models import A
class BMODEL(models.Model):
b_field = models.Forignkey(AMODEL, ..)
이럴 경우 circular import 에러가 발생
해결방법
import를 통해 가져오지 않고 모델에서 직접 명시적으로 알려준다
# A.model.py
class AMODEL(models.Model):
a_field = models.Forignkey(to='A.AMODEL', ..)
# a_field = models.Forignkey('A.AMODEL', ..) to를 생략해도 된다
알게된 점
FK, M2M모델을 작성할 때 임포트해서 가져오는 방식이 틀린건 아니지만 유지보수 및 확장성 을 생각했을 때 해결방법에 써놓은 것처럼 모델 필드단에서 어떤 앱에서 가져올지 명시적으로 적어주는 것 이 circle import 에러를 방지할 수 있는 좋은 코드라고 생각된다.
댓글남기기