[Django] Circular import Error


djangoでモデルを作成すると、アプリケーションは互いにインポートする必要がある場合に直面します.
この時点で実行すると、インポートできないエラーが発生し、ループインポートの解決を求められます.

解決する


djangoが提供する文字列メソッドを使用して、他のアプリケーションのモデルを参照します.
ex) ForeignKey, ManyToMany
  • "product.Product"—> 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)
    幸いなことに,将来的には上記のコードのようにループインポートエラーを簡単に解決できる.
    モデルからclassをインポートすると、importを使用することなく、文字列で他のアプリケーションのclassに接続できます.