2010-07-01 13 views
23

Necesito rastrear/registrar la actividad en el administrador de Django.Actividad de registro en el administrador de Django - Django

Sé que hay mensajes almacenados por el administrador en alguna parte, pero no sé cómo acceder a ellos para usarlos como un simple registro.


Estoy tratando de realizar un seguimiento de lo siguiente:

  • usuario realiza la acción

  • acción comprometida

  • de fecha y hora de la acción

Gracias chicos.

+0

ninguna de las siguientes respuestas funcionó? –

Respuesta

10

El registro está en la tabla django_admin_log en la base de datos utilizada por django.

+0

gracias! Pero no hay una marca de tiempo creada, ¿crees que podría arreglar esto de alguna manera? Estoy pensando en agregar una fila sql con un valor predeterminado – RadiantHex

+0

Puedes usar 'action_time' dentro de la clase' LogEntry'. Eche un vistazo a mi respuesta, –

+0

django_admin_log tabla solo le permite que haya cambios, no le permite saber qué valor se cambia y, en segundo lugar, al usar múltiples idiomas, el historial le mostrará el nombre de la columna solo en inglés, t no cambiará según su configuración regional. Es mejor hacer su propia historia o usar django.revision – ha22109

4

Eche un vistazo a la clase LogEntry que almacena el registro de las acciones dentro del administrador.

Se puede utilizar de esta manera para insertar entradas personalizadas en los registros:

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

que tenía que hacer algo similar y he usado algo como esto:

from django.contrib.admin.models import LogEntry 

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

Se puede ver all of the attributes for LogEntry, pero creo que los que está buscando son l.user, l.action_time y l.obj_repr (el nombre del obj) y l.action_flag ({1: 'Add', 2: 'Change', 3: 'Delete '}). ¡Espero que ayude!

Cuestiones relacionadas