Просмотр исходного кода

Merge pull request #6552 from drmsoffall/6493-diff-legacy-changes

Show change log diff for non-atomic changes
Jeremy Stretch 4 лет назад
Родитель
Сommit
6195fc0d11
2 измененных файлов с 15 добавлено и 5 удалено
  1. 13 5
      netbox/extras/views.py
  2. 2 0
      netbox/templates/extras/objectchange.html

+ 13 - 5
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
         }
 
 

+ 2 - 0
netbox/templates/extras/objectchange.html

@@ -128,6 +128,8 @@
                       <span{% if k in diff_removed %} style="background-color: #ffdce0"{% endif %}>{{ k }}: {{ v|render_json }}</span>
                     {% endspaceless %}
 {% 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 %}
                     <span class="text-muted">None</span>
                   {% endif %}