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 に答える