1. ホーム
  2. django

[解決済み] Django Admin のモデル履歴と連動させる

2022-11-11 02:06:07

質問

セットアップについて。

  • 私は、ユーザーがデータベースでオブジェクトを作成し、その後戻って好きなだけそれを編集できるようにする Django アプリケーションに取り組んでいます。
  • Django の管理サイトでは、管理サイトを通じてオブジェクトに加えられた変更の履歴を保持しています。

質問です。

  • ユーザーがコンテンツに加えた変更の履歴を見ることができるように、管理サイトの変更履歴に私のアプリケーションをフックするにはどうしたらよいでしょうか。

どのように解決するのですか?

管理履歴は、他のDjangoアプリと同じようにただのアプリで、例外は管理サイトに特別に配置されることです。

モデルは django.contrib.admin.models.LogEntry にあります。

ユーザが変更したとき、このようにログに追加します (contrib/admin/options.py から恥ずかしげもなく盗んできました。

from django.utils.encoding import force_unicode
from django.contrib.contenttypes.models import ContentType
from django.contrib.admin.models import LogEntry, ADDITION
LogEntry.objects.log_action(
    user_id         = request.user.pk, 
    content_type_id = ContentType.objects.get_for_model(object).pk,
    object_id       = object.pk,
    object_repr     = force_unicode(object), 
    action_flag     = ADDITION
)

ここで object はもちろん変更されたオブジェクトです。

今、私はDanielの答えを見て、彼に同意します、それはかなり限定的です。

私の意見では、より強力なアプローチは、彼の本でMarty Alchinからコードを使用することです。 Djangoのプロ (参照 歴史的な記録を残す の263ページ以降を参照)。アプリケーションもある django-simple-history というアプリケーションがあり、このアプローチを実装・拡張しています ( ドキュメントはこちら ).