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 %}