2010-08-07 82 views
3

我有一個模型類「Action」,它被其他幾個類擴展。我是django的新手,並假設如果我調用pre_save.connect(actionFunc,sender = Action),ActionFunc隨時會調用Action類中的save方法(包括任何派生類)時調用它。Can Django pre_save信號適用於所有派生類

我的觀察是,只有當實例是發件人中定義的類類型的直接匹配時,纔會觸發此函數。無論如何要讓它接收Action的所有派生實例的信號?

+1

http://stackoverflow.com/questions/5472818/working-with-djangos-post-save-signal/7202729#7202729 – Anentropic 2011-08-26 11:22:45

回答

1

不,您必須撥打pre_save.connect許多次。

但是,您可以使用python獲取擴展感興趣的類的所有類,並循環pre_save connect語句。

說,如果Action的擴展類都在一個給定的文件,你可以做到以下幾點:

global_dict = globals().copy() 
[el for el in global_dict.values() if getattr(el,'__base__',None)==Action] 
+0

而不是多次連接,您可以連接一次而不指定發件人,並在接收器功能中檢查發件人issubclass() – Anentropic 2011-08-26 11:22:32

0

一件事你可以做的是修改信號發送器在Django,這樣,而不是匹配針對特定類型代替它確實

if isinstance(sender, filter): 
    send_signal() 

(僞碼)