2

在 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

但发现它丑陋和骇人听闻。

那么替换信号处理程序的正确方法是什么?

谢谢

4

1 回答 1

2

你试过了Signal.disconnect吗?

signals.satchmo_cart_add_verify.disconnect(
    signals.satchmo_cart_add_verify.receivers[0][1]())

这种方式很清楚IMO。

于 2013-03-25T15:10:58.687 回答