Регистрация активности на админку Django - Django - PullRequest
25 голосов
/ 01 июля 2010

Мне нужно отслеживать / регистрировать активность на администраторе Django.

Я знаю, что сообщения где-то хранятся администратором, но я не знаю, как получить к ним доступ, чтобы использовать их как простой журнал.


Я пытаюсь отследить следующее:

  • Пользователь, выполняющий действие

  • Действие совершено

  • Дата и время действия

Спасибо, ребята.

Ответы [ 4 ]

21 голосов
/ 01 июля 2010

Мне пришлось сделать что-то подобное, и я использовал что-то вроде этого:

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 (имя объекта) и l.action_flag ({1: «Добавить», 2: «Изменить», 3: «Удалить»}).Надеюсь, это поможет!

11 голосов
/ 01 июля 2010

Журнал находится в таблице django_admin_log в базе данных, используемой django.

5 голосов
/ 01 июля 2010

Взгляните на класс 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)
0 голосов
/ 24 августа 2018

Если вы не возражаете против установки дополнительной зависимости, я могу порекомендовать django-logentry-admin , для меня это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...