在Django
的文档中,它指定models.py
是查找信号(post_save
,pre_save
等的回调函数的好地方。
此代码应该在哪里生效?
您可以将信号处理和注册码放在任何您喜欢的地方。 但是,您需要确保它所在的模块得到 早期导入,以便之前注册信号处理 需要发送任何信号。这使你的应用程序的models.py很好 放置信号处理程序的地方。
但是,我有大量依赖于信号的业务逻辑,并且在与我的所有模型相同的文件中查看它们变得具有挑战性。
我想将它们移动到另一个文件,但我不知道如何或在哪里可以引用它们。
因此,鉴于以下文件结构,您是否可以提供一个示例,说明如何引用包含适当信号的辅助(或三级等)文件?
# models.py located in /myapp/some_installed_app/
from django import needed.modules
... # some reference to signals.py?
class SomeModel()
pass
# signals.py located in /myapp/some_installed_app/
from django import needed.things
...
def somefun(sender,**kwargs)
pass
post_save.connect(somefun, sender=SomeModel)
答案 0 :(得分:7)
如何在models.py中“连接”信号,同时将函数保存在signals.py?
中一个例子:
# models
from myapp import signals
class MyModel(models.Model)
pass
post_save.connect(signals.do_some_stuff_with_mymodel, sender = MyModel)
# signals
def do_some_stuff_with_mymodel(**kwargs):
pass
这样您就不必在models
中导入signals
答案 1 :(得分:1)
另一种选择是在__init__.py
文件中导入信号。
这样可以确保提前注册并避免循环导入。