2
在Django商店應用程序中,獲取註冊信號處理程序以執行某項操作,例如將項目添加到購物車。如何覆蓋Django的信號處理程序?
我想用我自己的版本替換這個處理程序localsite/models.py
,即。而不觸及原始來源。
如果只是打電話connect
方法
signals.satchmo_cart_add_verify.connect(my_veto_out_of_stock)
的自定義處理程序追加到當前recievers清單和原始仍然得到一個動作:
print signals.satchmo_cart_add_verify.receivers
"""
[((140073113515864, 140073319632416), <weakref at 0x7f65502c1aa0;
to 'function' at 0x7f65502c7758 (veto_out_of_stock)>),
((140073114981632, 140073319632416), <weakref at 0x7f65504295d0;
to 'function' at 0x7f655042d500 (my_veto_out_of_stock)>)]
"""
我可以在事先刪除原來的處理程序與
for hnd in signals.satchmo_cart_add_verify.receivers:
del hnd
但發現它醜陋和hackish。
那麼替換信號處理程序的正確方法是什麼?
感謝
我剛找到一種方法。導入原始處理程序函數並將其傳遞給'signals..disconnect',但即使在導入原始函數時,是否還有更通用的方法? – 2013-03-25 15:09:46
好吧,只要輸入鏈接... – okm 2013-03-25 15:11:14
如果你不能導入原始函數(因爲你不知道它在編程時它在哪裏),你可以通過類似'signals.satchmo_cart_add_verify.receivers [0 ] [1]()' – okm 2013-03-25 15:17:19