django를 통해 models을 작성하다보면 앱들이 서로 import 해야하는 상황을 마주하게 된다.
이 때 실행하게 되면 import를 할 수 없다는 에러가 뜨면서 circular import를 해결해야 될거라고 hint를 줍니다.
django에서 제공하는 문자열 방법으로 다른 앱의 모델을 참조한다.
ex) ForeignKey, ManyToMany
from product import Product
# product/models.py
from django.db import models
class Product(models.Model):
comment = models.ManyToManyField(**"user.User"**, through="Comment", related_name="product")
class Comment(models.Model):
product = models.ForeignKey("Product", on_delete=models.CASCADE)
user = models.ForeignKey("User", on_delete=models.CASCADE)
# user/models.py
from django.db import models
class User(models.Model):
wishlist = models.ManyToManyField(**"product.Product"**, through="WishList", related_name="user")
class WishList(models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE)
product = models.ForeignKey("Product", on_delete=models.CASCADE)
다행히 장고에서는 위 코드처럼 쉽게 circular import error를 해결할 수 있습니다.
모델에서 class를 import 할 때 장고는 import를 사용하지 않고 문자열을 통해 다른 앱의 class에 연결할 수 있습니다.