1

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 テスト サーバーのバグですか? 他に何か不足していますか?

4

1 に答える 1

4

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

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

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

したがって、呼び出しで a を指定してdispatch_uidconnect問題が解消されるかどうかを確認できます。

于 2009-07-19T06:14:06.183 に答える