Made it work for other models

This commit is contained in:
David Taylor
2015-05-23 14:57:29 +01:00
parent e5a7da3d7d
commit 5f2fde3ecc
6 changed files with 33 additions and 13 deletions

View File

@@ -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'),

View File

@@ -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 @@
<thead>
<tr>
<td>Date</td>
<td>Event</td>
<td>Object</td>
<td>Version ID</td>
<td>User</td>
<td>Changes</td>
@@ -65,14 +66,14 @@
<tr>
<td>{{ version.revision.date_created|date:"RIGS_DATETIME_FORMAT" }}</td>
<td><a href="{% url 'event_detail' version.new.pk %}">N{{ version.new.pk|stringformat:"05d" }}</a></td>
<td><a href="{{ version.current.get_absolute_url }}">{{version.current|to_class_name}} {{ version.new.pk|stringformat:"05d" }}</a></td>
<td>{{ version.version.pk }}|{{ version.revision.pk }}</td>
<td>{{ version.revision.user.name }}</td>
<td>
{% if version.old == None %}
Event Created
{% else %}
{% include 'RIGS/event_version_changes.html' %}
{% include 'RIGS/version_changes.html' %}
{% endif %} </td>
</tr>
@@ -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 %}

View File

@@ -40,7 +40,7 @@
{% if version.old == None %}
Event Created
{% else %}
{% include 'RIGS/event_version_changes.html' %}
{% include 'RIGS/version_changes.html' %}
{% endif %}
</td>
</tr>

View File

@@ -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()

View File

@@ -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):