自定义信号不起作用

sch*_*eck 2 django django-signals

我创建了一个信号:

sig_published = Signal()
Run Code Online (Sandbox Code Playgroud)

此信号放在signals.py中,我在models.py中导入:

from signals import sig_published
Run Code Online (Sandbox Code Playgroud)

在模型文件的页脚中,我将它连接到一个函数,为了测试目的,只打印出一个调试字符串:

def update_mode(sender, **kwargs):
    print "UPDATING"
sig_published.connect(update_mode, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)

现在,在我的save() - Method中,我尝试发送一个信号:

sig_published.send(sender=self)
Run Code Online (Sandbox Code Playgroud)

但它没有打印出任何东西.如果我尝试像pre_save这样的内置信号:

pre_save.connect(update_mode, sender=MyModel)
Run Code Online (Sandbox Code Playgroud)

有用.有任何想法吗?

lqc*_*lqc 5

您发出的信号与sender您的模型实例相同,而在连接中您则与MyModel 匹配.这两个不是同一个对象,所以你的接收器忽略了信号.您可以与pre_save发射代码进行比较,它使用的是类,而不是实例.