2010-07-01 3 views
23

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

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


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

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

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

  • Datetime действия

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

+0

Ни один из нижеприведенных ответов не работал? –

ответ

10

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

+0

спасибо! Но нет созданной временной метки, как вы думаете, я могу это исправить? Я думаю о добавлении строки sql со значением по умолчанию – RadiantHex

+0

Вы можете использовать 'action_time' в классе' LogEntry'. Взгляните на мой ответ: –

+0

Таблица django_admin_log только позволяет вам, чтобы произошли изменения, они не позволяют вам знать, какое значение изменено, а во-вторых, при использовании нескольких языков история покажет вам имя столбца только на английском языке, t не изменится как за вас locale.It лучше сделать свою собственную историю или использовать django.revision – ha22109

4

Посмотрите на класс 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) 
16

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

from django.contrib.admin.models import LogEntry 

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

Вы можете увидеть all of the attributes for LogEntry, но я думаю, что те, которые вы ищете, это l.user, l.action_time и l.obj_repr (имя obj) и l.action_flag ({1: 'Добавить', 2: 'Изменить', 3: 'Удалить «}). Надеюсь, это поможет!

Смежные вопросы