I need to track/log activity on the Django admin.
I know there are messages stored by admin somewhere, but I don't know how to access them in order to use them as a simple log.
I'm trying to track the following:
User performing the action
Action committed
Da开发者_StackOverflowtetime of action
Thanks guys.
I had to do something similar and I used something like this:
from django.contrib.admin.models import LogEntry
logs = LogEntry.objects.all() #or you can filter, etc.
for l in logs:
#perform action
You can see all of the attributes for LogEntry, but I think the ones you are looking for are l.user
, l.action_time
and l.obj_repr
(the name of the obj
) and l.action_flag
({ 1:'Add',2:'Change',3:'Delete'}
). Hope that helps!
Log is in django_admin_log table in database used by django.
Take a look at the LogEntry class which stores the log for the actions inside the admin.
You could use it like this to insert custom entries in the logs:
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)
精彩评论