スポンサードリンク



こんにちは。sinyです。

この記事ではDjangoのモデルで実装したテーブルの履歴管理機能を実装する方法をご紹介します。

テーブルの履歴情報を管理したり、ロールバック機能を利用したいという方には大変便利な機能だと思いますので試してみてください。

django-reversionとは?

django-reversionというモジュールを使うと、Djangoで実装したモデル(テーブル)の履歴管理を実装することができます。

具体的には、以下のような機能を実装することができます。

・モデルインスタンスの履歴内の任意の時点にロールバック
・削除されたモデルインスタンスを回復(テーブルの復元)
・簡単な管理統合

django-reversionの実装手順

django-reversionの実装手順は非常に簡単です。
まずは、pipでモジュールをインストールします。

 

続いて、settings.pyの INSTALLED_APPSに「 'reversion' 」を追加します。

※なお、Djangoのプロジェクト名を「project」、アプリケーション名は「app」とします。

 

続いてマイグレーションを実行します。

 

最後にAdminサイトの設定を行います。

アプリケーション配下のadmin.pyを少しカスタマイズします。

ここでは、Bookというテーブルクラスを例に記載しています。

通常テーブルをadminサイトに表示するには、admin.ModelAdminを使って以下のように定義します。

 

上記に以下を追加し、

 

admin.ModelAdmin ⇒ VersionAdmin に変更します。

変更後のadmin.pyは以下のようになります。

 

以上で設定は完了です。

続いて、初期変更履歴のバージョンを生成するために以下のコマンドを実行します。

 

パラメータの指定の仕方は以下の通りです。

 

python manage.py createinitialrevisions [アプリケーション名].[テーブルクラス名] --comment="Initial revision."

上記コマンドを実行すると、下記画面のようにテーブルレコードに対して履歴情報のInitial情報が生成されます。

履歴管理とレコードの復元

adminサイトにログオンしてテーブルを参照すると以下のように「RECOVER DELETED」というボタンが追加されています。

このボタンを押すと、過去にレコードを削除した履歴情報が表示されます。

復元したい行をクリックすると削除した時点のレコード情報が表示されるので、「保存」ボタンを押すとレコードが復元されます。

続いてテーブルレコードの変更履歴ですが、テーブルのレコード画面を開くと、以下のように「履歴」ボタンが追加されているのでクリックします。

以下の通り、レコード毎に変更履歴を保持していて、復元したい日時の行をクリックして、保存ボタンを押すとその時点のレコード内容に復元することができます。

最後に、履歴情報をクリアする方法をご紹介します。

 

 上記の通り、履歴情報のクリアは全テーブル or テーブル単位に実行できます。

 

以上、「Djangoでテーブルの履歴管理機能を実装する方法」でした。

 

おすすめの記事