説明した問題を解決する方法はたくさんあります:
- アプリケーションロジック
- ビュー固有のロジック -動作が単一のビューに固有である場合は、変更をビューに配置します。
- モデル固有のロジック -動作が単一のモデルに固有の場合、 save()メソッドをオーバーライドする モデルの場合。
- ミドルウェアロジック -動作が複数のモデルに関連している場合、または既存のアプリケーションをラップする必要がある場合は、Djangoの保存前/保存後のシグナル アプリケーション自体を変更せずに動作を追加します。
- データベースストアドプロシージャ -通常は可能ですが、DjangoのORMはそれらを使用しません。データベース間での移植性はありません。
- データベーストリガー -あるデータベースから別のデータベースへ(またはデータベースのあるバージョンから次のバージョンへ)移植することはできませんが、複数の(おそらくDjango以外の)アプリケーション間で共有される動作を制御できます。
個人的には、save()メソッドをオーバーライドするか、Djangoシグナルを使用することを好みます。ビュー固有のロジックを使用すると、同じモデルの複数のビューを持つ大規模なアプリケーションを見つけることができます。