2011-05-07 56 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