問題タブ [django-signals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
4439 参照

python - Django manytomany シグナル?

私がそのようなモデルを持っているとしましょう

イベントによって一部のユーザーが追加/削除された場合、users_count の値をどのように更新することをお勧めしますか?

0 投票する
4 に答える
1038 参照

python - Django の多くのモデルに共通の date_added、date_modified を追加する最良の方法

現在のプロジェクトの一般的なモデルの束に、date_added フィールドと date_modified フィールドを追加しています。models.Model をサブクラス化し、適切なフィールドを追加していますが、自動保存動作を追加したいと考えています (つまり、誰かが MyModel.save() を呼び出すたびに、date_modified フィールドが更新されます。2 つの方法があります: save() メソッドをオーバーライドするまたは、抽象基本クラスに pre_save シグナル ハンドラーを追加します。

また

私は Django と Python が初めてで、どのアプローチがより「django」であるか疑問に思いましたか? どちらがより効率的ですか? これを行う「正しい」方法はどれですか?

0 投票する
4 に答える
1323 参照

django - Django: 信号は正確に何に適していますか?

アプリケーションでシグナルがどのように機能するか (およびシグナルがどのように機能するか) を理解するのに苦労しています。これらは、(私の現在の知識では)適用されると私が推測する3つの領域です。

  1. レポートのために XML をリモート サーバーに送信します (トランザクションの完了後)。
  2. ユーザーが画像をアップロードした後、画像のサイズを変更し、サムネイルを S3 にアップロードします。
  3. ユーザーが自分のアカウントからイメージ オブジェクトを削除した後、S3 から古いイメージを削除します。

私は完全にベースから外れていますか(私はそうかもしれません)。シグナルとマルチスレッドが混同されていますか? もしそうなら、彼らはそこのアプリケーションで比較しますか? デカップリング専用ですか?また、それらを早期にインスタンス化し、ローカル関数を使用しないようにするのはどうですか (ガベージ コレクションが発生するため)。誰かがそれについて詳しく説明できますか?心配しなくてもいいように、それらをすべてリクエスト ミドルウェアに入れる必要がありますか?

0 投票する
5 に答える
18147 参照

django - モデルの信号を切断し、django で再接続する

モデルを保存する必要がありますが、保存する前に信号の受信機を切断する必要があります。

つまり、

私はモデルを持っています:

コードの別の場所では、次のようなものが必要です。

この場合は必要なので、関数 pre_save_model を実行せずにモデルを保存します。

0 投票する
3 に答える
5643 参照

python - モデルメソッドのデコレータを介したDjangoシグナル?

これらの提案されたシグナルデコレータのようなことをしようとしています。装飾されたメソッドをシグナルに接続するデコレーター (シグナルの送信者をデコレーターへの引数として) を持つことに加えて、クラス メソッドでデコレーターを使用したいと考えています。

次のようにデコレータを使用したいと思います。

デコレータは次のとおりです。

これを行うと発生するエラーは次のとおりです。

@classmethod問題は、呼び出し不可能なクラスメソッドオブジェクトを返すことだと思います。内部で がどのように機能するかはよくわかりませんが、このリファレンス ページから、クラスからアクセスされるまで、クラス メソッド オブジェクトは callable に変換されないことがclassmethod推測されます。(1) モデルのクラスまたはインスタンス メソッドとしてメソッドを定義し、(2) メソッド定義で直接デコレータを使用してシグナルに接続する方法はありますか? ありがとう!ModelA.observe_model_b_saved

0 投票する
2 に答える
3111 参照

django - Django モデル、シグナル、およびメール送信の遅延

モデルにシグナルを追加しました。これは、モデルが保存されると (models.signals.post_save.connectシグナルおよびsend_mail電子メール送信用に)、いくつかの電子メール アドレスに電子メールを送信します。この考えは、ユーザーがモデルをサイトに保存するときに、すべての電子メールが送信されるまで待たなければならず、サーバーからの応答を受信するまで、ユーザーに遅延をもたらします。

シグナルを試す前に、モデルの保存メソッドをラップしようとしましたsuper(Foo, self).save(*args, **kwargs)が、メールを送信した後でした。この遅延の経験は、その方法でも発生していました。

サイトのユーザーに遅延を表示することなく、メール送信アクションをバックグラウンドで実行したいだけです。

これはどのように解決できますか?

0 投票する
2 に答える
1944 参照

python - post_save シグナルと作成した引数について

ドキュメントは言う:

そして私はこれを持っています:

私がシェルで行うとき:

>>> --------> save() False更新なので、2回目に save() すると期待していますか? いいえ?

0 投票する
3 に答える
51597 参照

django - Djangoのカスケード削除動作をオーバーライドするためのオプションは何ですか?

Djangoモデルは通常、ON DELETE CASCADEの動作を非常に適切に処理します(ネイティブでサポートされていないデータベースで機能する方法で)。

ただし、次のシナリオなど、適切でない場合にこの動作をオーバーライドするための最良の方法を見つけるのに苦労しています。

  • ON DELETE RESTRICT(つまり、子レコードがある場合はオブジェクトの削除を防止します)

  • ON DELETE SET NULL(つまり、子レコードを削除せずに、関係を解除する代わりに、その親キーをNULLに設定します)

  • レコードが削除されたときに他の関連データを更新する(アップロードされた画像ファイルの削除など)

以下は、私が知っているこれらを達成するための潜在的な方法です。

  • モデルのdelete()メソッドをオーバーライドします。この種の作業は機能しますが、レコードが。を介して削除されると回避されQuerySetます。また、すべてのモデルdelete()をオーバーライドして、Djangoのコードがsuper()呼び出されないようにし、QuerySet子オブジェクトを削除するためにを使用する可能性があるため、呼び出すことができないようにする必要があります。

  • 信号を使用します。モデルを直接削除するとき、またはQuerySetを介して削除するときに呼び出されるため、これは理想的なようです。ただし、子オブジェクトの削除を防ぐことはできないため、ONCASCADERESTRICTまたはSETNULLを実装することはできません。

  • これを適切に処理するデータベースエンジンを使用します(この場合、Djangoは何をしますか?)

  • Djangoがそれをサポートするまで待ちます(そしてそれまでバグを抱えて生きます...)

最初のオプションが唯一の実行可能なオプションのようですが、それは醜く、お風呂の水で赤ちゃんを捨て、新しいモデル/関係が追加されたときに何かを見逃すリスクがあります。

私は何かが足りないのですか?何かお勧めはありますか?

0 投票する
1 に答える
310 参照

django - Djangoの「comment_was_flagged」シグナル

djangoシグナルを扱うのはこれが初めてであり、コメントがフラグ付けされたときに通知するために、コメントアプリによって提供される「comment_was_flagged」シグナルをフックしたいと思います。

これは私のコードですが、機能していないようです。何かが足りませんか?

(私は今のところ電子メールをテストしていますが、電子メールが正しく送信されていることを確認しました。)

ありがとう!

0 投票する
3 に答える
3953 参照

django - 抽象モデルでDjangoシグナルを使用するにはどうすればよいですか?

ディスク上のキャッシュを保持する抽象モデルがあります。モデルを削除するとき、キャッシュを削除するためにモデルが必要です。これは、すべての派生モデルでも発生するようにしたいと思います。

抽象モデルを指定する信号を接続すると、これは派生モデルに伝播されません。

派生クラス名を取得できるinitでシグナルを接続しようとすると、機能しますが、派生モデルを初期化した回数だけでなく、何度もキャッシュをクリアしようとするのではないかと心配しています。 。

信号はどこに接続すればよいですか?