2011-05-07 58 views
5

我正试图在一个模型上注册多个信号。看起来,当我注册一个额外的信号,它删除了以前的信号。在Django注册多个信号

from django.dispatch import receiver 
from django.db.models.signals import post_save,post_delete 
from my.app.models import Resource 


@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Deleted" 

我查看了文档,但是我一直在寻找关于如何在类合成器中创建自定义信号的详细信息。不是如何以课堂格式注册。

我会想象我可以做这样的事情:

@reciver(sender=Resource) 
class SignalAnsweringMachine(object): 
    def post_delete(self,**kwargs): 
     print "delete" 
    def post_save(self,**kwargs): 
     print "save" 

感谢您的帮助提前。

回答

11

您(可能无意中)重新定义了ResourceSaved。试试这个:

@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceDeleted(sender,**kwargs): 
    print "Deleted" 
5

我使用这个简写形式来注册两个或多个处理程序。

在我的情况下,我清除缓存的类别列表。

from django.dispatch import receiver 
from django.db.models.signals import post_save, post_delete 
from ..models import Category 

all_categories = [] 

# Post save handler for Category model to clear "all_categores" variable 
@receiver(post_save, sender=Category) 
@receiver(post_delete, sender=Category) 
def post_save_category(sender, **kwargs): 
    # clean cached categories 
    global all_categories 
    all_categories = [] 
+1

哇这个工作吗? – eugene 2016-05-19 02:45:14