モデルの履歴を保存できるdjangoパッケージを探していますが、更新時のみです。django-reversion を見つけましたが、ざっと見てみると、そのような機能はないようです。私のデータベース構造はかなり複雑で、それらを書くのは難しいので、データベーストリガーもオプションではありません。
2 に答える
私はある時点で同じ問題を抱えていました。
当時の私の解決策は、次の 2 つのモデルを定義することでした。
- content : Web サイトのコンテンツの抽象化に対応します。このモデルは、Web サイトの現在のコンテンツを保持するものです。
- action : Web サイトのコンテンツ変更の抽象化に対応します。
contentには、アクションへの 2 つのポインター (OneToOneField) があります。 first editは、その特定のコンテンツを作成したアクションであり、last editは、コンテンツに対して行われた最後の変更を含むアクションです。
アクションには、アクションを実行したユーザーであるアクターへの 1 つのポインター (OneToOneField) と、特定のコンテンツに対する前のアクションである別のアクションへのポインター (ForeignField) があります。また、コンテンツの変更を保存する TextField もあります。これは、たとえば、データベースの diff のようなテキスト、または単純な辞書のピクルスにすることができます。
ある意味では、これは git のようなバージョン管理と同等であり、「アクション」は特定のコンテンツ (プロジェクト全体ではなく) に対するコミットであり、コンテンツはソースです。コミットは「前のコミット」を介してリンクされ、コンテンツの変更とユーザーを保存します。
南を使用できます。モデルへの変更を検出し、データベースを前後に同期できる移行ファイルを作成します。