Added changelog views

This commit is contained in:
Jeremy Stretch
2018-06-14 16:15:14 -04:00
parent 21c4085c51
commit 3c2e0b0b17
26 changed files with 790 additions and 507 deletions

View File

@@ -132,7 +132,7 @@ class TopologyMapAdmin(admin.ModelAdmin):
@admin.register(ObjectChange)
class ObjectChangeAdmin(admin.ModelAdmin):
actions = None
fields = ['time', 'content_type', 'display_object', 'action', 'display_user']
fields = ['time', 'content_type', 'display_object', 'action', 'display_user', 'object_data']
list_display = ['time', 'content_type', 'display_object', 'display_action', 'display_user']
list_filter = ['time', 'action', 'user__username']
list_select_related = ['content_type', 'user']
@@ -156,7 +156,7 @@ class ObjectChangeAdmin(admin.ModelAdmin):
OBJECTCHANGE_ACTION_DELETE: 'deletelink',
}
return mark_safe('<span class="{}">{}</span>'.format(icon[obj.action], obj.get_action_display()))
display_user.short_description = 'action'
display_action.short_description = 'action'
def display_object(self, obj):
if hasattr(obj.changed_object, 'get_absolute_url'):

View File

@@ -2,6 +2,7 @@ from __future__ import unicode_literals
from collections import OrderedDict
from datetime import date
import json
import graphviz
from django.contrib.auth.models import User
@@ -720,6 +721,10 @@ class ObjectChange(models.Model):
return super(ObjectChange, self).save(*args, **kwargs)
@property
def object_data_pretty(self):
return json.dumps(self.object_data, indent=4, sort_keys=True)
#
# User actions

View File

@@ -1,7 +1,9 @@
from __future__ import unicode_literals
from django import template
from django.contrib import messages
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.contrib.contenttypes.models import ContentType
from django.db.models import Count
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect, render, reverse
@@ -12,7 +14,7 @@ from taggit.models import Tag
from utilities.forms import ConfirmationForm
from utilities.views import BulkDeleteView, ObjectDeleteView, ObjectEditView, ObjectListView
from .forms import ImageAttachmentForm, TagForm
from .models import ImageAttachment, ReportResult, UserAction
from .models import ImageAttachment, ObjectChange, ReportResult, UserAction
from .reports import get_report, get_reports
from .tables import TagTable
@@ -50,6 +52,41 @@ class TagBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
default_return_url = 'extras:tag_list'
#
# Change logging
#
class ChangeLogView(View):
"""
Present a history of changes made to an object.
"""
def get(self, request, model, **kwargs):
# Get object my model and kwargs (e.g. slug='foo')
obj = get_object_or_404(model, **kwargs)
# Gather all changes for this object
content_type = ContentType.objects.get_for_model(model)
changes = ObjectChange.objects.filter(content_type=content_type, object_id=obj.pk)
# Check whether a header template exists for this model
base_template = '{}/{}.html'.format(model._meta.app_label, model._meta.model_name)
try:
template.loader.get_template(base_template)
object_var = model._meta.model_name
except template.TemplateDoesNotExist:
base_template = '_base.html'
object_var = 'obj'
return render(request, 'extras/changelog.html', {
object_var: obj,
'changes': changes,
'base_template': base_template,
'active_tab': 'changelog',
})
#
# Image attachments
#