[解決済み] Djangoのシグナルとsaveメソッドのオーバーライド
質問
私はこのことについて理解するのに苦労しています。 今、私はこのような感じのいくつかのモデルを持っています。
def Review(models.Model)
...fields...
overall_score = models.FloatField(blank=True)
def Score(models.Model)
review = models.ForeignKey(Review)
question = models.TextField()
grade = models.IntegerField()
レビューにはいくつかのスコアがあり、overall_scoreはその平均値です。 レビューやスコアが保存されたとき、overall_scoreの平均を再計算する必要があります。 今はオーバーライドされた保存メソッドを使用しています。 Django のシグナルディスパッチャを使うことに何か利点があるでしょうか?
どのように解決するのですか?
保存/削除シグナルは一般に、問題のモデルに完全に固有でない変更を行う必要がある場合、または共通の何かを持つモデルに適用できる場合、またはモデル間で使用するように構成できる場合に好都合です。
オーバーライドされた1つの共通のタスクは
save
メソッドにおける共通のタスクは、モデル内のいくつかのテキストフィールドからのスラッグの自動生成です。これは、もしあなたが多くのモデルのためにそれを実装する必要があるのであれば、そのようなものの一例です。
pre_save
シグナルを使用することが有益で、シグナルハンドラはスラッグフィールドの名前とスラッグを生成するフィールドの名前を受け取ることができます。一旦そのようなものを設置すれば、設置した拡張機能はすべてのモデルにも適用されます - たとえば、一意性を確保するために、問題のモデルのタイプに追加しようとしているスラッグを検索します。
再利用可能なアプリケーションは、しばしばシグナルの使用から恩恵を受けます。提供する機能がどのモデルにも適用できる場合、一般的に(避けられない場合を除き)ユーザーはその恩恵を受けるためにモデルを直接修正する必要がないことを望みます。
とは
django-mptt
を使う場合、例えば
pre_save
シグナルを使って、作成または更新されようとしているモデルのツリー構造を記述するフィールドのセットを管理し、さらに
pre_delete
シグナルは、削除されるオブジェクトとその前のオブジェクトのサブツリー全体のツリー構造の詳細を削除し、それらが削除されるようにします。シグナルの使用により、ユーザは追加または修正することなく
save
または
delete
メソッドで管理できるようにするには、django-mptt にどのモデルを管理させたいかを 知らせるだけでよいのです。
関連
-
[解決済み】Djangoのクエリセットフィルタリングでnot equalを行うにはどうすればよいですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] Djangoの "slug "とは何ですか?
-
[解決済み] Djangoのバージョンを確認する方法
-
[解決済み] Django のモデルで on_delete は何をするのですか?
-
[解決済み] django の OneToOneField と ForeignKey の違いは何ですか?
-
[解決済み】Djangoでnull=Trueとblank=Trueの違いは何ですか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜ django の model.save() は full_clean() を呼び出さないのでしょうか?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] PythonでSVGからPNGに変換する
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?