diff --git a/djadmin2/models.py b/djadmin2/models.py index 2333db6..aa94a61 100644 --- a/djadmin2/models.py +++ b/djadmin2/models.py @@ -15,11 +15,11 @@ from . import permissions class LogEntryManager(models.Manager): - def log_action(self, user_id, content_type_id, object_id, object_repr, - action_flag, change_message=''): + def log_action(self, user_id, obj, action_flag, change_message=''): + content_type_id = ContentType.objects.get_for_model(obj).id e = self.model(None, None, user_id, content_type_id, - smart_text(object_id), object_repr[:200], action_flag, - change_message) + smart_text(obj.id), obj.__unicode__()[:200], + action_flag, change_message) e.save() @@ -30,8 +30,10 @@ class LogEntry(models.Model): DELETION = 3 action_time = models.DateTimeField(_('action time'), auto_now=True) - user = models.ForeignKey(settings.AUTH_USER_MODEL) - content_type = models.ForeignKey(ContentType, blank=True, null=True) + user = models.ForeignKey(settings.AUTH_USER_MODEL, + related_name='log_entries') + content_type = models.ForeignKey(ContentType, blank=True, null=True, + related_name='log_entries') object_id = models.TextField(_('object id'), blank=True, null=True) object_repr = models.CharField(_('object repr'), max_length=200) action_flag = models.PositiveSmallIntegerField(_('action flag')) diff --git a/djadmin2/templatetags/admin2_tags.py b/djadmin2/templatetags/admin2_tags.py index a395269..833cef0 100644 --- a/djadmin2/templatetags/admin2_tags.py +++ b/djadmin2/templatetags/admin2_tags.py @@ -7,7 +7,7 @@ from datetime import date, time, datetime from django import template from django.db.models.fields import FieldDoesNotExist -from .. import utils, renderers +from .. import utils, renderers, models register = template.Library() @@ -141,6 +141,5 @@ def render(context, model_instance, attribute_name): @register.inclusion_tag('djadmin2theme_default/includes/history.html', takes_context=True) def action_history(context): - from django.contrib.admin.models import LogEntry - actions = LogEntry.objects.filter(user__pk=context['user'].pk) + actions = models.LogEntry.objects.filter(user__pk=context['user'].pk) return {'actions': actions} diff --git a/djadmin2/views.py b/djadmin2/views.py index b5c9baa..d8532a6 100644 --- a/djadmin2/views.py +++ b/djadmin2/views.py @@ -22,6 +22,7 @@ import extra_views from . import permissions, utils from .forms import AdminAuthenticationForm +from .models import LogEntry from .viewmixins import Admin2Mixin, AdminModel2Mixin, Admin2ModelFormMixin from .filters import build_list_filter @@ -231,6 +232,11 @@ class ModelEditFormView(AdminModel2Mixin, Admin2ModelFormMixin, context['action_name'] = ugettext_lazy("Change") return context + def forms_valid(self, form, inlines): + response = super(ModelEditFormView, self).forms_valid(form, inlines) + LogEntry.objects.log_action(self.request.user.id, self.object, 2) + return response + class ModelAddFormView(AdminModel2Mixin, Admin2ModelFormMixin, extra_views.CreateWithInlinesView): @@ -253,6 +259,11 @@ class ModelAddFormView(AdminModel2Mixin, Admin2ModelFormMixin, context['action_name'] = ugettext_lazy("Add") return context + def forms_valid(self, form, inlines): + response = super(ModelAddFormView, self).forms_valid(form, inlines) + LogEntry.objects.log_action(self.request.user.id, self.object, 1) + return response + class ModelDeleteView(AdminModel2Mixin, generic.DeleteView): """Context Variables @@ -283,6 +294,10 @@ class ModelDeleteView(AdminModel2Mixin, generic.DeleteView): }) return context + def delete(self, request, *args, **kwargs): + LogEntry.objects.log_action(request.user.id, self.get_object(), 3) + return super(ModelDeleteView, self).delete(request, *args, **kwargs) + class PasswordChangeView(Admin2Mixin, generic.UpdateView):