django1.1 testserverに複数回登録されたシグナル

django django-models django-signals python
django1.1 testserverに複数回登録されたシグナル

models.pyファイルでシグナルハンドラ関数を定義しました。 そのファイルの最後に、私はhttp://docs.djangoproject.com/en/dev/topics/signals/のドキュメントで推奨されているように `signals.post_save.connect(myhandler、sender = myclass)`を使用します。

しかし、テストサーバーを実行すると、単純なprint-statementデバッグにより、models.pyファイルが2回インポートされ(私の知る限り)、シグナルハンドラが2回登録されることがわかります。 これは、すべてのアクションが2回処理されることを意味します。これは明らかに意図した動作ではありません。

最初のインポートはモデルチェックフェーズの間に行われるようで、2番目のインポートはサーバーによって処理される最初の要求の間にモデル自体が必要とされるときに行われます。

シグナルハンドラを他の場所に登録する必要がありますか。 これは1.1テストサーバーのバグですか? 私は他に何かが足りないのですか?

  1  1


ベストアンサー

`+ connect +`メソッドのシグネチャは

def connect(self, receiver, sender=None, weak=True, dispatch_uid=None)

ここで、「+ dispatch_uid 」パラメーターは、レシーバーの特定のインスタンスを一意に識別するために使用される識別子です。 これは通常、文字列になりますが、ハッシュ可能なものなら何でもかまいません。 レシーバーに ` dispatch_uid `属性がある場合、その ` dispatch_uid +`を持つ別のレシーバーが既に存在する場合、レシーバーは追加されません。

そのため、 `+ connect `呼び出しで ` dispatch_uid +`を指定して、問題が解消されるかどうかを確認できます。

4


タイトルとURLをコピーしました