2010-07-01 14 views
23

Devo tracciare/registrare attività sull'amministratore di Django.Attività di registrazione sull'amministratore di Django - Django

So che ci sono messaggi memorizzati da admin da qualche parte, ma non so come accedervi al fine di usarli come un semplice log.


Sto cercando di rintracciare il seguente:

  • utente che esegue l'azione

  • azione impegna

  • Datetime d'azione

Grazie ragazzi.

+0

nessuna delle risposte seguenti ha funzionato? –

risposta

10

Log è nella tabella django_admin_log nel database utilizzato da Django.

+0

grazie! Ma non c'è un timestamp creato, pensi che potrei sistemarlo in qualche modo? Sto pensando di aggiungere una riga sql con un valore predefinito – RadiantHex

+0

Puoi usare 'action_time' all'interno della classe' LogEntry'. Dai un'occhiata alla mia risposta, –

+0

La tabella django_admin_log ti lascia solo che ci fosse cambiamento, non ti permette di sapere quale valore è cambiato e in secondo luogo quando usi più lingue la cronologia ti mostrerà il nome della colonna solo in inglese, non cambierà come per voi in locale. È meglio creare la propria storia o usare django.revision – ha22109

4

Date un'occhiata alla classe LogEntry che memorizza il registro per le azioni all'interno della admin.

Si potrebbe usare in questo modo di inserire voci personalizzate nei registri:

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

che dovevo fare qualcosa di simile e ho usato qualcosa di simile:

from django.contrib.admin.models import LogEntry 

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

Si può vedere all of the attributes for LogEntry, ma penso che quelli che stai cercando siano l.user, l.action_time e l.obj_repr (il nome dell'obj) e l.action_flag ({1: 'Aggiungi', 2: 'Cambia', 3: 'Elimina '}). Spero possa aiutare!

Problemi correlati