From 5f2fde3ecc55659aff1f4ffdf4df949793fe9609 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Sat, 23 May 2015 14:57:29 +0100 Subject: [PATCH] Made it work for other models --- RIGS/models.py | 9 ++++++++ RIGS/templates/RIGS/activity_stream.html | 9 ++++---- RIGS/templates/RIGS/event_version_list.html | 2 +- ...sion_changes.html => version_changes.html} | 0 RIGS/templatetags/filters.py | 4 ++++ RIGS/versioning.py | 22 ++++++++++++------- 6 files changed, 33 insertions(+), 13 deletions(-) rename RIGS/templates/RIGS/{event_version_changes.html => version_changes.html} (100%) diff --git a/RIGS/models.py b/RIGS/models.py index c9e6e998..1e4cfe6d 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -78,6 +78,9 @@ class Person(models.Model, RevisionMixin): def latest_events(self): return self.event_set.order_by('-start_date').select_related('person', 'organisation', 'venue', 'mic') + def get_absolute_url(self): + return reverse_lazy('person_detail', kwargs={'pk': self.pk}) + class Meta: permissions = ( ('view_person', 'Can view Persons'), @@ -114,6 +117,9 @@ class Organisation(models.Model, RevisionMixin): def latest_events(self): return self.event_set.order_by('-start_date').select_related('person', 'organisation', 'venue', 'mic') + def get_absolute_url(self): + return reverse_lazy('organisation_detail', kwargs={'pk': self.pk}) + class Meta: permissions = ( ('view_organisation', 'Can view Organisations'), @@ -176,6 +182,9 @@ class Venue(models.Model, RevisionMixin): def latest_events(self): return self.event_set.order_by('-start_date').select_related('person', 'organisation', 'venue', 'mic') + def get_absolute_url(self): + return reverse_lazy('venue_detail', kwargs={'pk': self.pk}) + class Meta: permissions = ( ('view_venue', 'Can view Venues'), diff --git a/RIGS/templates/RIGS/activity_stream.html b/RIGS/templates/RIGS/activity_stream.html index bd4e5167..38794db6 100644 --- a/RIGS/templates/RIGS/activity_stream.html +++ b/RIGS/templates/RIGS/activity_stream.html @@ -1,6 +1,7 @@ {% extends request.is_ajax|yesno:"base_ajax.html,base.html" %} {% load static %} {% load paginator from filters %} +{% load to_class_name from filters %} {% block title %}Rigboard Activity Stream{% endblock %} @@ -54,7 +55,7 @@ Date - Event + Object Version ID User Changes @@ -65,14 +66,14 @@ {{ version.revision.date_created|date:"RIGS_DATETIME_FORMAT" }} - N{{ version.new.pk|stringformat:"05d" }} + {{version.current|to_class_name}} {{ version.new.pk|stringformat:"05d" }} {{ version.version.pk }}|{{ version.revision.pk }} {{ version.revision.user.name }} {% if version.old == None %} Event Created {% else %} - {% include 'RIGS/event_version_changes.html' %} + {% include 'RIGS/version_changes.html' %} {% endif %} @@ -105,7 +106,7 @@ {% if version.old == None %} created {% else %} - changed {% include 'RIGS/event_version_changes.html' %} in + changed {% include 'RIGS/version_changes.html' %} in {% endif %} {% include 'RIGS/event_button.html' with event=version.current %} diff --git a/RIGS/templates/RIGS/event_version_list.html b/RIGS/templates/RIGS/event_version_list.html index 1e110b36..eb53d4d8 100644 --- a/RIGS/templates/RIGS/event_version_list.html +++ b/RIGS/templates/RIGS/event_version_list.html @@ -40,7 +40,7 @@ {% if version.old == None %} Event Created {% else %} - {% include 'RIGS/event_version_changes.html' %} + {% include 'RIGS/version_changes.html' %} {% endif %} diff --git a/RIGS/templates/RIGS/event_version_changes.html b/RIGS/templates/RIGS/version_changes.html similarity index 100% rename from RIGS/templates/RIGS/event_version_changes.html rename to RIGS/templates/RIGS/version_changes.html diff --git a/RIGS/templatetags/filters.py b/RIGS/templatetags/filters.py index 404bbd5e..5b81ce2f 100644 --- a/RIGS/templatetags/filters.py +++ b/RIGS/templatetags/filters.py @@ -9,6 +9,10 @@ register = template.Library() def multiply(value, arg): return value*arg +@register.filter +def to_class_name(value): + return value.__class__.__name__ + @register.filter def nice_errors(form, non_field_msg='General form errors'): nice_errors = ErrorDict() diff --git a/RIGS/versioning.py b/RIGS/versioning.py index 13763a2a..0b55698b 100644 --- a/RIGS/versioning.py +++ b/RIGS/versioning.py @@ -48,7 +48,8 @@ def model_compare(oldObj, newObj, excluded_keys=[]): continue # if we're excluding this field, skip over it try: - if oldValue != newValue: + bothBlank = (not oldValue) and (not newValue) + if oldValue != newValue and not bothBlank: compare = FieldCompare(thisField,oldValue,newValue) changes.append(compare) except TypeError: # logs issues with naive vs tz-aware datetimes @@ -92,19 +93,22 @@ def compare_event_items(old, new): return changes -def get_versions_for_model(model): - content_type = ContentType.objects.get_for_model(model) +def get_versions_for_model(models): + content_types = [] + for model in models: + content_types.append(ContentType.objects.get_for_model(model)) + versions = reversion.models.Version.objects.filter( - content_type = content_type, + content_type__in = content_types, ).select_related("revision","revision.version_set").order_by("-pk") return versions def get_previous_version(version): - thisEventId = version.object_id + thisId = version.object_id thisVersionId = version.pk - versions = reversion.get_for_object_reference(models.Event, thisEventId) + versions = reversion.get_for_object_reference(version.content_type.model_class(), thisId) try: previousVersions = versions.filter(pk__lt=thisVersionId).latest(field_name='pk') # this is very slow :( @@ -120,10 +124,12 @@ def get_changes_for_version(newVersion, oldVersion=None): if oldVersion == None: oldVersion = get_previous_version(newVersion) + modelClass = newVersion.content_type.model_class() + compare = {} compare['revision'] = newVersion.revision compare['new'] = newVersion.object_version.object - compare['current'] = models.Event.objects.get(pk=compare['new'].pk) + compare['current'] = modelClass.objects.get(pk=compare['new'].pk) compare['version'] = newVersion if oldVersion: @@ -162,7 +168,7 @@ class ActivityStream(generic.ListView): paginate_by = 25 def get_queryset(self): - versions = get_versions_for_model(models.Event) + versions = get_versions_for_model([models.Event,models.Venue,models.Person,models.Organisation]) return versions def get_context_data(self, **kwargs):