mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #6493: show ObjectChange diff for non-atomic changes
This commit is contained in:
@@ -202,15 +202,22 @@ class ObjectChangeView(generic.ObjectView):
|
|||||||
next_change = objectchanges.filter(time__gt=instance.time).order_by('time').first()
|
next_change = objectchanges.filter(time__gt=instance.time).order_by('time').first()
|
||||||
prev_change = objectchanges.filter(time__lt=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(
|
diff_added = shallow_compare_dict(
|
||||||
instance.prechange_data or dict(),
|
prechange_data or dict(),
|
||||||
instance.postchange_data or dict(),
|
instance.postchange_data or dict(),
|
||||||
exclude=['last_updated'],
|
exclude=['last_updated'],
|
||||||
)
|
)
|
||||||
diff_removed = {
|
diff_removed = {
|
||||||
x: instance.prechange_data.get(x) for x in diff_added
|
x: prechange_data.get(x) for x in diff_added
|
||||||
} if instance.prechange_data else {}
|
} if prechange_data else {}
|
||||||
else:
|
else:
|
||||||
diff_added = None
|
diff_added = None
|
||||||
diff_removed = None
|
diff_removed = None
|
||||||
@@ -221,7 +228,8 @@ class ObjectChangeView(generic.ObjectView):
|
|||||||
'next_change': next_change,
|
'next_change': next_change,
|
||||||
'prev_change': prev_change,
|
'prev_change': prev_change,
|
||||||
'related_changes_table': related_changes_table,
|
'related_changes_table': related_changes_table,
|
||||||
'related_changes_count': related_changes.count()
|
'related_changes_count': related_changes.count(),
|
||||||
|
'non_atomic_change': non_atomic_change
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -128,6 +128,8 @@
|
|||||||
<span{% if k in diff_removed %} style="background-color: #ffdce0"{% endif %}>{{ k }}: {{ v|render_json }}</span>
|
<span{% if k in diff_removed %} style="background-color: #ffdce0"{% endif %}>{{ k }}: {{ v|render_json }}</span>
|
||||||
{% endspaceless %}
|
{% endspaceless %}
|
||||||
{% endfor %}</pre>
|
{% endfor %}</pre>
|
||||||
|
{% elif non_atomic_change %}
|
||||||
|
Warning: Comparing non-atomic change to previous change record (<a href="{% url 'extras:objectchange' pk=prev_change.pk %}">{{ prev_change.pk }}</a>)
|
||||||
{% else %}
|
{% else %}
|
||||||
<span class="text-muted">None</span>
|
<span class="text-muted">None</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
Reference in New Issue
Block a user