【发布时间】:2015-02-14 20:04:59
【问题描述】:
我有一个名为 customer 的 django 应用程序。在customer.models 里面我有一些模型类,其中之一是Tooth。我还在我的应用程序目录中创建了一个名为 callbacks.py 的新 python 文件来存储一些信号的一些回调函数。我要做的是以下
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 版本
【问题讨论】:
-
customer/models.py是否导入callbacks.py?您可能在此处进行循环导入。 -
是的...但是如何在 models.py 文件上使用我的回调?
-
有多种方法可以做到这一点,但最好的方法取决于您使用的 Django 版本。您使用的是哪个版本?如有必要,您介意升级吗?
-
the right place to keep my signals.py files in django 的可能副本。您还需要将信号注册移至
callbacks.py文件(即移出models.py文件,并删除循环导入)。 -
@ThomasOrozco 但在 django 文档中说注册最好在 models.py 中完成:“这段代码应该放在哪里?你可以将信号处理和注册代码放在任何你喜欢的地方。但是,你'需要确保尽早导入它所在的模块,以便在需要发送任何信号之前注册信号处理。这使您的应用程序的 models.py 成为注册信号处理程序的好地方。“