【发布时间】:2012-12-13 07:57:38
【问题描述】:
在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)
【问题讨论】:
-
from signals import *在您的models.py中不起作用? -
@favoretti 我现在就试试。
-
如果您在 models.py 中导入信号,在 signal.py 中导入模型,您可能需要使用特定的导入语句来避免循环导入:
import signals和import models,而不是使用*或该模块的成员。 -
虽然可能不是,考虑到它不仅仅是fundefs,还有funcalls。
-
那么也许你可以将fundefs留在signals.py中并参考它们(实际的
post_save.connect(...)仍然在models.py中调用。