cstrap
3/25/2015 - 1:34 PM

Django model log history. A sample that uses LogEntry (django default) and reversion.

Django model log history. A sample that uses LogEntry (django default) and reversion.

from django.contrib.admin.models import LogEntry, CHANGE, ContentType
from reversion.revisions import default_revision_manager as revision_manager

from app.models import MyModel

revision_manager.register(MyModel)

LogUser, created = User.objects.get_or_create(username='LogUser')
if created:
    ApplicationUser.first_name = 'Log'
    ApplicationUser.last_name = 'User'
    ApplicationUser.email = settings.ADMINS[0][-1]
    ApplicationUser.is_staff = False
    ApplicationUser.is_active = True
    ApplicationUser.is_superuser = False
    ApplicationUser.set_password('password') # just for sample ...
    ApplicationUser.save()

user = ApplicationUser # or it can be request.user ...

def log_admin(model, message):
    # Django admin log
    # see use on django.contrib.admin.options
    LogEntry.objects.log_action(
        user_id=user.pk,
        content_type_id=ContentType.objects.get_for_model(model).pk,
        object_id=model.pk,
        object_repr=force_unicode(model),
        action_flag=CHANGE,
        change_message=message
    )
    # Reversion admin log, needed if model is registered on reversion
    revision_manager.save_revision([model], ignore_duplicates=True, user=user, comment=message)