从其他应用程序导入模型类,不会导致 Django 中的循环引用

Sel*_*sen 5 django model circular-dependency

我有 3 个应用程序产品、销售、购买。每个应用程序都有一个相应命名的模型类、产品、销售和购买。

products/models.py
class Product(models.Model):
    Name = models.CharField(max_length=32)

sales/models.py
class Sale(models.Model):
    Product = models.ForeignKey('products.Product', on_delete=models.CASCADE)

purchases/models.py
class Purchase(models.Model):
    Product = models.ForeignKey('products.Product', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

我决定为模型类创建自定义管理器,以便当我在导入产品中的销售模型的自定义管理器中编写方法时,可以将所有逻辑保留在模型文件中(通过覆盖每个类的对象 attr )。 sales.models 中的 models 和 Product 模型创建了一个循环引用,我能够通过在方法本身中执行导入来摆脱它,但我记得在网上读到循环导入是糟糕的代码编写的标志。

所以我的问题是在这种情况下如何避免循环导入并访问 sales.models 中的产品模型和 products.models 中的销售。

小智 8

您可以按名称导入模型以避免循环导入。当需要使用模型时,像这样导入:

from django.apps import apps

ModelName = apps.get_model(app_label='app_name', model_name='ModelName')
Run Code Online (Sandbox Code Playgroud)