abo*_*nov 8 python django recursion django-models
我有一个模型project_phase:
from django.db import models
from django.utils import simplejson
from core.models import pmo_review_task
Run Code Online (Sandbox Code Playgroud)
它引用了pmo_review_task(因为它在其save ovewrite中创建了一个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
Run Code Online (Sandbox Code Playgroud)
引用引用project_phase的sc_review_task(因为它在save ovewrite中创建了project_phase)
from django.db import models
from core.models import project_phase
Run Code Online (Sandbox Code Playgroud)
所以它结束了project_phase导入pmo_review_task导入sc_review_task导入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
Run Code Online (Sandbox Code Playgroud)
我怎么克服这个?
DrT*_*rsa 19
两种方式:
使用为懒惰模型导入设计的get_model函数django.db.models:
project_phase = get_model('core', 'project_phase')
Run Code Online (Sandbox Code Playgroud)我更喜欢第二个,但两种方法都可以.
导入方法project_phase内部save.
只要执行代码,就会调用导入.
如果它位于全局模块命名空间(顶部),则会立即调用它,并且您将描述循环导入问题,因为一个文件导入另一个导入原始文件的文件.
如果将问题import语句放在函数中,则在导入文件时会/不/调用它.
import foo # executed upon importing this file.
def import_foo_when_called():
import foo # only executed when function is called, thus no problems when
# another module imports this file.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3991 次 |
| 最近记录: |