diff --git a/netbox/extras/views.py b/netbox/extras/views.py
index 3f86c98d2..5316cfbec 100644
--- a/netbox/extras/views.py
+++ b/netbox/extras/views.py
@@ -202,15 +202,22 @@ class ObjectChangeView(generic.ObjectView):
next_change = objectchanges.filter(time__gt=instance.time).order_by('time').first()
prev_change = objectchanges.filter(time__lt=instance.time).order_by('-time').first()
- if instance.prechange_data and instance.postchange_data:
+ if not instance.prechange_data and instance.action in ['update', 'delete'] and prev_change:
+ non_atomic_change = True
+ prechange_data = prev_change.postchange_data
+ else:
+ non_atomic_change = False
+ prechange_data = instance.prechange_data
+
+ if prechange_data and instance.postchange_data:
diff_added = shallow_compare_dict(
- instance.prechange_data or dict(),
+ prechange_data or dict(),
instance.postchange_data or dict(),
exclude=['last_updated'],
)
diff_removed = {
- x: instance.prechange_data.get(x) for x in diff_added
- } if instance.prechange_data else {}
+ x: prechange_data.get(x) for x in diff_added
+ } if prechange_data else {}
else:
diff_added = None
diff_removed = None
@@ -221,7 +228,8 @@ class ObjectChangeView(generic.ObjectView):
'next_change': next_change,
'prev_change': prev_change,
'related_changes_table': related_changes_table,
- 'related_changes_count': related_changes.count()
+ 'related_changes_count': related_changes.count(),
+ 'non_atomic_change': non_atomic_change
}
diff --git a/netbox/templates/extras/objectchange.html b/netbox/templates/extras/objectchange.html
index 9dcd8c2ac..c49cea79b 100644
--- a/netbox/templates/extras/objectchange.html
+++ b/netbox/templates/extras/objectchange.html
@@ -128,6 +128,8 @@
{{ k }}: {{ v|render_json }}
{% endspaceless %}
{% endfor %}
+ {% elif non_atomic_change %}
+ Warning: Comparing non-atomic change to previous change record ({{ prev_change.pk }})
{% else %}
None
{% endif %}