在Django商店应用程序中,有一个注册信号处理程序来执行某些操作,例如将项目添加到购物车。
我想在localsite/models.py
中用我自己的版本替换这个处理程序,即。没有触及原始资源。
如果只是调用connect
方法
signals.satchmo_cart_add_verify.connect(my_veto_out_of_stock)
自定义处理程序附加到当前收件人列表,原始仍然会收到操作:
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
但发现它丑陋和黑客。
那么更换信号处理程序的正确方法是什么?
由于
答案 0 :(得分:1)
您是否尝过Signal.disconnect
?
signals.satchmo_cart_add_verify.disconnect(
signals.satchmo_cart_add_verify.receivers[0][1]())
这种方式很明确IMO。