拆分模型使新模型上的迁移在现有模型上返回ImportError

2024-10-03 06:29:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在关注Django文档的主题Organizing models in a package,让一切都正常工作。然后,当我移动到一个新的部分,更改一个模型或添加新模型时,当我进行迁移时,当该模型对我的用户模型有一个外键时,我不断地点击ImportError。你知道吗

我正在使用一个基于django-cookie-cutter的项目,添加了新的应用程序,并重构了型号.py到目录/包。你知道吗

以下是终端输出:

(iqport) C:\dev\iqdev\iqport>python manage.py makemigrations
Loading : C:\dev\iqdev\iqport\.env
The .env file has been loaded. See base.py for more information
Traceback (most recent call last):
  File "manage.py", line 29, in <module>
    execute_from_command_line(sys.argv)
  File "C:\Env\iqport\lib\site-packages\django\core\management\__init__.py", line 363, in execute_from_command_line
    utility.execute()
  File "C:\Env\iqport\lib\site-packages\django\core\management\__init__.py", line 337, in execute
    django.setup()
  File "C:\Env\iqport\lib\site-packages\django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Env\iqport\lib\site-packages\django\apps\registry.py", line 108, in populate
    app_config.import_models()
  File "C:\Env\iqport\lib\site-packages\django\apps\config.py", line 202, in import_models
    self.models_module = import_module(models_module_name)
  File "C:\Program Files\Python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "C:\dev\iqdev\iqport\iqport\users\models.py", line 8, in <module>
    from iqport.core.models import Client
  File "C:\dev\iqdev\iqport\iqport\core\models\__init__.py", line 3, in <module>
    from .staffing import TeamMember
  File "C:\dev\iqdev\iqport\iqport\core\models\staffing.py", line 5, in <module>
    from iqport.users.models import User
ImportError: cannot import name 'User'

下面是我正在尝试生成迁移的新模型:

from django.db import models
from django.utils import timezone
from simple_history.models import HistoricalRecords

from iqport.users.models import User
from iqport.core.models.core_config import StaffRoles, Client


class TeamMember(models.Model):
    staff = models.ForeignKey(User)
    client = models.ForeignKey(Client)
    role = models.ForeignKey(StaffRoles)
    valid_from = models.DateField(auto_now=True)
    valid_to = models.DateField(null=True, blank=True)
    history = HistoricalRecords()

在另一个项目中,我遇到了同样的问题,只有在完成所有迁移并重新开始之后,我才克服了这个问题。这样做没有任何意义,我也不明白为什么它会抱怨导入用户模型。在PyCharm中,只有在运行make迁移时,才会验证模型代码,并且在导入时不会显示任何错误。你知道吗

除了提倡不要分裂模式之外,有人有什么建议来克服这个问题吗?蒂亚。你知道吗

编辑:注释输出:

from iqport.core.models import Client

在我的用户模型中,这一点就消失了。你知道吗


Tags: djangoinfrompycore模型importmodels
1条回答
网友
1楼 · 发布于 2024-10-03 06:29:58

circular import正如我在评论中提到的,这是一个循环导入错误。你知道吗

 File "C:\dev\iqdev\iqport\iqport\users\models.py", line 8, in <module>
    from iqport.core.models import Client
  File "C:\dev\iqdev\iqport\iqport\core\models\__init__.py", line 3, in <module>
    from .staffing import TeamMember
  File "C:\dev\iqdev\iqport\iqport\core\models\staffing.py", line 5, in <module>
    from iqport.users.models import User
ImportError: cannot import name 'User'

您可以尝试执行更高级别的导入,如:

from iqport.users.models as user_models

并按如下方式创建外键:

staff = models.ForeignKey(user_models.User)

终止迁移并不能解决这个问题。你知道吗

相关问题 更多 >