2010-07-01 15 views
23

Ich muss Aktivität auf dem Django Admin verfolgen/protokollieren.Logging-Aktivität auf Django Admin - Django

Ich weiß, es sind Nachrichten von admin irgendwo gespeichert, aber ich weiß nicht, wie sie zuzugreifen, um sie als ein einfaches Protokoll zu verwenden.


Ich versuche, die folgenden zu verfolgen:

  • Benutzer die Aktion ausführt

  • Aktion

    begangen
  • für Datum und Uhrzeit der Aktion

Danke Jungs.

+0

keine der folgenden Antworten funktionierte? –

Antwort

10

Log ist in django_admin_log Tabelle in der Datenbank von django verwendet.

+0

danke! Aber es gibt keinen erstellten Zeitstempel, glaubst du, ich könnte das irgendwie reparieren? Ich denke über das Hinzufügen einer SQL-Zeile mit einem Standard – RadiantHex

+0

Sie können die 'action_time' innerhalb der' LogEntry' Klasse verwenden. Werfen Sie einen Blick auf meine Antwort, –

+0

django_admin_log Tabelle nur lassen Sie, dass es Änderung gab Sie nicht wissen lassen, welcher Wert geändert wird und zweitens, wenn Sie mehrere Sprachen verwenden, zeigt Ihnen der Verlauf den Spaltennamen nur in Englisch, t ändert sich nicht als per you locale.Es ist besser, Ihre eigene Geschichte zu erstellen oder django.revision zu verwenden – ha22109

4

Werfen Sie einen Blick auf die LogEntry Klasse, die für die Aktionen innerhalb des Admin das Protokoll gespeichert werden.

Sie es wie folgt verwenden können benutzerdefinierte Einträge in den Protokollen einzufügen:

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

ich etwas Ähnliches zu tun hatte und ich so etwas wie dieses:

from django.contrib.admin.models import LogEntry 

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

Sie all of the attributes for LogEntry sehen können, aber ich denke, diejenigen, nach denen Sie suchen, sind l.user, l.action_time und l.obj_repr (der Name des obj) und l.action_flag ({1: 'Add', 2: 'Change', 3: 'Delete '}). Ich hoffe, das hilft!