我有一個模型類「Action」,它被其他幾個類擴展。我是django的新手,並假設如果我調用pre_save.connect(actionFunc,sender = Action),ActionFunc隨時會調用Action類中的save方法(包括任何派生類)時調用它。Can Django pre_save信號適用於所有派生類
我的觀察是,只有當實例是發件人中定義的類類型的直接匹配時,纔會觸發此函數。無論如何要讓它接收Action的所有派生實例的信號?
我有一個模型類「Action」,它被其他幾個類擴展。我是django的新手,並假設如果我調用pre_save.connect(actionFunc,sender = Action),ActionFunc隨時會調用Action類中的save方法(包括任何派生類)時調用它。Can Django pre_save信號適用於所有派生類
我的觀察是,只有當實例是發件人中定義的類類型的直接匹配時,纔會觸發此函數。無論如何要讓它接收Action的所有派生實例的信號?
不,您必須撥打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]
而不是多次連接,您可以連接一次而不指定發件人,並在接收器功能中檢查發件人issubclass() – Anentropic 2011-08-26 11:22:32
一件事你可以做的是修改信號發送器在Django,這樣,而不是匹配針對特定類型代替它確實
if isinstance(sender, filter):
send_signal()
(僞碼)
http://stackoverflow.com/questions/5472818/working-with-djangos-post-save-signal/7202729#7202729 – Anentropic 2011-08-26 11:22:45