我有一个名为customer的django应用程序。在customer.models
里面我有一些模型类,其中一个是Tooth。我还在我的应用程序目录中创建了一个名为callbacks.py的新python文件,以存储一些signla的回调函数。我所做的是以下
from customer.models import Tooth
def callback(sender, **kwargs)
#using Tooth here
和models.py
from customer.callbacks import callback
#.....
post_save.connect(callback, sender=Customer)
但是当我尝试运行sqlall时出现导入错误
from customer.models import Tooth
ImportError: cannot import name Tooth
其他所有其他导入工作正常。
编辑:使用Django 1.6版本
答案 0 :(得分:1)
这是循环导入。
以下是发生的事情:
customer.models
customer/models.py
的内容以计算模块的属性customers/models.py
导入customer/callbacks.py
customer/models.py
并开始执行customer/callbacks.py
callbacks.py
尝试导入正在导入的models.py
。 Python防止双重导入模块并引发ImportError。通常这种情况显示设计不佳。但有时(这似乎是你的情况)紧密耦合是必需的。解决此问题的一种快速而肮脏的方法是延迟循环导入,在您的情况下:
在models.py
:
from customer.callbacks import callback
# Define Tooth
post_save.connect(callback, sender=Customer)
在callbacks.py
:
def callback(sender, **kwargs)
from customer.models import Tooth
# Use Tooth