python - django 模型递归导入 - 如何解决

标签 python django django-models recursion

我有一个模型project_phase:

    from django.db import models
    from django.utils import simplejson
    from core.models import pmo_review_task

它引用了pmo_review_task(因为它在它的保存覆盖中创建了一个pmo_review_task)

from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
from core.models import sc_review_task

它引用了 sc_review_task,它引用了 project_phase(因为它在其保存覆盖中创建了一个 project_phase)

from django.db import models
from core.models import project_phase

所以它结束了 project_phase imports pmo_review_task imports sc_review_task imports project_phase 我想它会以某种方式循环生成这个错误:

Unhandled exception in thread started by <bound method Command.inner_run of <django.core.management.commands.runserver.Command object at 0x010ACFB0>>
Traceback (most recent call last):
  File "C:\Python27\lib\site-packages\django\core\management\commands\runserver.py", line 88, in inner_run
    self.validate(display_num_errors=True)
  File "C:\Python27\lib\site-packages\django\core\management\base.py", line 249, in validate
    num_errors = get_validation_errors(s, app)
  File "C:\Python27\lib\site-packages\django\core\management\validation.py", line 35, in get_validation_errors
    for (app_name, error) in get_app_errors().items():
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 146, in get_app_errors
    self._populate()
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 64, in _populate
    self.load_app(app_name)
  File "C:\Python27\lib\site-packages\django\db\models\loading.py", line 78, in load_app
    models = import_module('.models', app_name)
  File "C:\Python27\lib\site-packages\django\utils\importlib.py", line 35, in import_module
    __import__(name)
  File "C:\work\Portman\core\models\__init__.py", line 4, in <module>
    from pmo_review_task import pmo_review_task
  File "C:\work\Portman\core\models\pmo_review_task.py", line 5, in <module>
    from core.models import sc_review_task
  File "C:\work\Portman\core\models\sc_review_task.py", line 3, in <module>
    from core.models import project_phase
  File "C:\work\Portman\core\models\project_phase.py", line 4, in <module>
    from core.models import pmo_review_task
ImportError: cannot import name pmo_review_task

我该如何克服这个问题?

最佳答案

两种方式:

  1. 在方法中导入模型(如@YujiTomita 所建议)。
  2. 使用 django.db.models 中的 get_model 函数,该函数专为惰性模型导入而设计。

    project_phase = get_model('core', 'project_phase')
    

我更喜欢第二种,但是两种方法都可以。

关于python - django 模型递归导入 - 如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324554/

相关文章:

python - 日期的格式字符串在转换为十进制日和月时无效

python - 读取换行符分隔文件并丢弃换行符的最佳方法?

javascript - Django formset.js : Can't delete a from

python - 如何在 Django 管理中按值列表进行过滤?

python - Django 类别及其子类别

python - 脚本重启后存在连接错误

Django navigator.sendbeacon csrf保护

django - django rest框架中的id、url和自然键

将字段更改为 ManyToMany 时的 Django 数据迁移

python - pymongo 64 位无符号整数