如何在使用多个 Django 应用程序时修复 'ImportError'

How to fix 'ImportError' while working with multiple Django apps

我在 django 中使用多个应用程序并在 运行ning makemigrations 命令时遇到 ImportError
导入语句如下,appwise:

accounting/models.py
from activity.models import HistoryModel

activity/models.py
from user_management.models import Customer, Merchant, PassIssued
from accounting.models import ITMSCustomer

user_management/models.py
from accounting.models import Account, Transaction, Posting

我确定 INSTALLED_APPS 中列出的应用顺序很重要,顺序是:

'user_management',
'accounting',
'activity',

当我执行 运行 makemigrations 命令时出现以下错误:

  File "/home/abhishek/citycash/city-server/src/cityserver/user_management/models.py", line 4, in <module>
    from accounting.models import Account, Transaction, Posting
  File "/home/abhishek/citycash/city-server/src/cityserver/accounting/models.py", line 17, in <module>
    from activity.models import HistoryModel
  File "/home/abhishek/citycash/city-server/src/cityserver/activity/models.py", line 4, in <module>
    from user_management.models import Customer, Merchant, PassIssued
ImportError: cannot import name 'Customer'

我尝试更改 INSTALLED_APPS 中应用程序的顺序,但我最终得到了不同模块的 ImportError。我知道这与所有三个应用程序都相互导入某些东西这一事实有关。我该如何解决这个错误?
任何帮助表示赞赏。提前致谢。

来自文档:https://docs.djangoproject.com/en/2.1/ref/models/fields/#foreignkey

如果需要在尚未定义的模型上创建关系,可以使用模型的名称,而不是模型对象本身:

from django.db import models

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'Manufacturer',
        on_delete=models.CASCADE,
    )
    # ...

class Manufacturer(models.Model):
    # ...
    pass

要引用另一个应用程序中定义的模型,您可以明确指定一个带有完整应用程序标签的模型。例如,如果上面的 Manufacturer 模型是在另一个名为 production 的应用程序中定义的,则需要使用:

class Car(models.Model):
    manufacturer = models.ForeignKey(
        'production.Manufacturer',
        on_delete=models.CASCADE,
    )

这种称为惰性关系的引用在解决两个应用程序之间的循环导入依赖关系时非常有用。

为了帮助将来遇到同样问题的人,我最终创建了一个新应用程序(具有 HistoryModelBaseHistoryModel 等)并导入它。欢迎任何其他建议。