問題タブ [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.
django - 重複したリクエスト スレッドは、Django モデルで重複したデータベース エントリを作成します
問題: シグナル受信機は、特定の条件のモデル エントリが存在するかどうかを確認し、存在しない場合は新しいエントリを作成します。ごくまれに、エントリが重複しています。
レシーバー関数内:
の明らかな候補ですget_or_create
が、そのコードをクリーンアップする以外に、get_or_create
ヘルプを使用するとこの問題を防ぐことができますか?
シグナルはユーザーアクションの後に送信されますが、元のリクエストが複製されているとは思われません。これは、他のアクションをトリガーしたからです。
重複は、数千回のインスタンスで数回発生しています。これは必然的に複数のリクエストによって引き起こされたものですか、それとも重複したスレッドが作成される可能性がありますか? そして、おそらく詳細なトランザクション管理を使用して、重複を防ぐ方法はありますか?
Django 1.1、Python 2.4、PostgreSQL 8.1、および Apache2 での mod_wsgi の使用。
django - 管理者からのDjangoシグナル
たとえば、通常のビューからのpost_saveと管理者からのpost_saveを区別するにはどうすればよいですか?
python - Djangoはm2mフィールドで自動分類します
django/satchmo を継承した JPiece というモデル Product で pre_save シグナルを実行しました。また、satchmo カテゴリからの別のモデル継承である JewelCategory を持っています。pre_save シグナルにより、JPiece オブジェクトはカテゴリ リストを取得し、Jpiece の説明に適合するカテゴリをリレーションに追加します。これはモデルで行われます。つまり、手動で行う場合
p = Jpiece.objects.get(pk=3) p.save()
カテゴリは保存され、p.category m2m 関係に追加されますが、管理者から保存すると、これは行われません...
どうすればこれを達成できますか...管理者からJPieceを保存し、それが属するカテゴリも取得するには...
以下のモデルは、どちらも satchmo の製品クラスとカテゴリ クラスからモデルを継承していることを覚えています。
必要なものについて説明が曖昧な場合があることは承知していますので、何でもお気軽にお尋ねください。これは緊急に必要なクライアントであるため、できるだけ早く明確にするようにしてください.
いつもありがとうございます。
python - Djangoが「完全にロードされた」後に任意のコードを実行する方法
Django環境が「完全にロード」された後、いくつかの非常に単純なタスクを実行する必要があります。
具体的にはSignal.disconnect()
、サードパーティのライブラリによってデフォルトで設定されているDjango Signalsやconnect
独自のSignalsなどを実行する必要があります。また、別のライブラリのDjangoモデルに便利な機能を追加するために、 「モンキーパッチ」を実行する必要があります。
私はDjangoアプリの__init__.py
ファイルでこのようなことを行ってきました。これはモンキーパッチでは正常に機能しているようですが、Signalの切断では機能しません。問題はタイミングの1つであるように思われます。何らかの理由で、Signal.connect()
私が試した後、サードパーティライブラリは常にそれを呼び出してSignal.disconnect()
いるようです。
したがって、2つの質問:
INSTALLED_APPS
アプリの__init__.py
モジュールが読み込まれる順序に基づく保証はありますか?
Djangoアプリが完全にメモリにロードされた後に実行する必要があるロジックを配置する適切な場所はありますか?
python - Django の post_save() シグナルの操作
私は2つのテーブルを持っています:
また、新しい広告を追加した後、検証テーブルに自動入力する必要があります。
もちろん、うまくいきません。Django 1.2 Q: どうすればいいですか?
わかりました、半分解決しました。
問題は、親モデルの post_save() が子モデルを呼び出さないことです。
したがって、子クラスを直接提供することで解決できます。
次の質問は、「post_save() に親クラスを使用するにはどうすればよいですか?」ということです。
django - ジャンゴの「pre_select」に似た信号または何かがありますか?
私はdjangoでシステムを作成していますが、データベースでSQLの「選択」クエリが実行されるたびに呼び出されるシグナルがあると非常に便利です。つまり、「pre_select」または「post_select」シグナル メソッドのようなものがあるかどうかは誰にもわかりませんか?
django docs でシグナル「connection_created」を見つけましたが、それを使用する方法の手がかりを見つけることができず、それを呼び出したモデルへのアクセスについてはあまり知りませんでした。公式ドキュメントには存在すると書かれていますが、簡単な使用例はありません... =/
編集: connection_created は、接続が作成されたときにのみ機能するため (その名前が示すように)、まだ解決策がありません =/.
私が望むものの例は、個別のオブジェクトでこのクエリを実行することです:
したがって、データやログなどを脅かすために、各クエリがデータベースに送信される直前に、各クエリからデータを受信する関数が呼び出されます。django ログシステムは似たようなものを使用しているように見えるため、django にはそのような機能が存在すると思います。
どんな助けでも大歓迎です。前もって感謝します!
python - Django: post_save シグナルで元の (変更されていない) インスタンスにアクセスする方法
パフォーマンスを向上させるためにデータの非正規化を行い、ブログ投稿が受け取った投票の合計を Post モデル内に入れたいと考えています。
もちろん、Post.rating
値を実際に保つ必要があります。通常はデータベース トリガーを使用しますが、今回はpost_save
(データベースの処理時間を短縮するために) シグナルを送信することにしました。
保存前のインスタンス値にアクセスするにはどうすればよいですか? データベーストリガーでは、これOLD
をNEW
事前定義しますが、post_save シグナルにこのようなものはありますか?
アップデート
マークの答えに基づく解決策:
django - djangoシグナルで削除をキャンセルする方法
django pre_delete シグナルを使用してレコードの削除をキャンセルする方法はありますか?
例:
もう1つの質問は、「ファイルを変更する前に最初に元のファイルを削除する」というモデルに言う方法があります.やれ。
(django 1.2では、変更または削除時にファイルを自動的に削除しますが、django 1.3ではこの機能を削除しました)
前もって感謝します
django - post_saveシグナルハンドラーを使用して、新しく作成されたモデルインスタンスの関連データにアクセスする
Entry
管理パネルからモデルの新しいインスタンスが作成されたら、電子メールを送信する必要があります。だからmodels.py
私は持っています:
次に、私はpost_saveハンドラー関数を登録します。
動作しますが、前述したように、関連する添付ファイルにアクセスして、メッセージに詳細を含める必要があります。残念ながら、添付ファイルが実際に追加された場合でも、関数instance.attachments.all()
内に空のリストが返されます。send_message
私が理解したように、post_saveシグナルが送信されたとき、保存されたモデルの関連データはまだ保存されていないため、その場所から関連する添付ファイルを取得できません。質問は次のとおりです。シグナルを使用して、または他の方法でこれを達成できますか、またはこの電子メール送信コードを外部に配置する必要がありますか?たとえば、Entry
モデルの管理パネル変更ビューをオーバーライドしますか?
python - Django pre_save が 2 回トリガーされました
データの非正規化にdjango信号を使用しています。これが私のコードです:
理由はわかりませんが、Vote
インスタンスが保存されているときにupdate_post_votes_on_save()
が 2 回呼び出されています。コードにバグがあると思っていましたが、管理インターフェイスから保存しても同じ結果が得られます。
Docs は重複呼び出しを防ぐために使用dispatch_uid
することについて何か言っていますが、これが事実であるかどうかはわかりません。使い方はdispatch_uid
?私はこれを試しましたが、運がありません:
関数が2回呼び出される理由とそれを回避する方法はありますか?