我正在django中使用多个应用程序,并且在运行makemigrations
命令时遇到了 ImportError 。
适用于import的语句如下:
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。我知道这与所有三个应用程序都从彼此导入东西有关。如何解决此错误?
任何帮助表示赞赏。预先感谢。
答案 0 :(得分:0)
从文档中: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
要引用在另一个应用程序中定义的模型,可以显式指定带有完整应用程序标签的模型。例如,如果上面的制造商模型是在另一个称为生产的应用程序中定义的,则需要使用:
class Car(models.Model):
manufacturer = models.ForeignKey(
'production.Manufacturer',
on_delete=models.CASCADE,
)
这种引用称为惰性关系,在解决两个应用程序之间的循环导入依赖性时很有用。
答案 1 :(得分:0)
为了帮助将来遇到相同问题的人,我最终创建了一个新应用(具有HistoryModel
,BaseHistoryModel
等)并将其导入。欢迎其他任何建议。