web-dev-qa-db-ja.com

Djangoの管理者のログアクティビティ-Django

Django adminのアクティビティを追跡/ログに記録する必要があります。

管理者によってどこかに保存されているメッセージがあることは知っていますが、それらを単純なログとして使用するためにそれらにアクセスする方法がわかりません。


私は以下を追跡しようとしています:

  • アクションを実行するユーザー

  • コミットされたアクション

  • アクションの日時

みんなありがとう。

28
RadiantHex

私は似たようなことをしなければならず、次のようなものを使用しました:

from Django.contrib.admin.models import LogEntry

logs = LogEntry.objects.all() #or you can filter, etc.
for l in logs:
    #perform action

LogEntryのすべての属性 が表示されますが、探しているのはl.user、l.action_time、l.obj_repr(objの名前)およびl.action_flag( {1: '追加'、2: '変更'、3: '削除'})。お役に立てば幸いです。

21
Katharine

ログは、Djangoが使用するデータベースのDjango_admin_logテーブルにあります。

13
zaynyatyi

管理者内のアクションのログを格納する LogEntry クラスを見てください。

このように使用して、ログにカスタムエントリを挿入できます。

from settings import LOG_SIZE, LOG_THRESHOLD
from Django.contrib.admin.models import LogEntry

if not LogEntry._meta.installed:
        raise ImproperlyConfigured("You'll need to put 'Django.contrib.admin' in your INSTALLED_APPS setting before you can use the admin application.")

def log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
        # limit log size
        log_count = LogEntry.objects.count()

        if log_count > LOG_THRESHOLD:
                to_delete = LogEntry.objects.all()[LOG_SIZE:log_count]

                #FIXME (!?): to_delete.delete()
                for d in to_delete:
                        d.delete()

        LogEntry.objects.log_action(user_id, content_type_id, object_id, object_repr, action_flag, change_message)
5
the_void

追加の依存関係をインストールしてもかまわない場合は、 Django-logentry-admin をお勧めします。これは、私にとって魅力のように機能しました。

1
damd