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

13599 fix cached counter for edit object (#13600)

* 13599 fix cache counter

* 13599 update test

* Merge conditionals

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
Arthur Hanson 2 лет назад
Родитель
Сommit
065a40dfb3
2 измененных файлов с 7 добавлено и 3 удалено
  1. 2 2
      netbox/utilities/counters.py
  2. 5 1
      netbox/utilities/tests/test_counters.py

+ 2 - 2
netbox/utilities/counters.py

@@ -27,7 +27,7 @@ def update_counter(model, pk, counter_name, value):
 # Signal handlers
 #
 
-def post_save_receiver(sender, instance, **kwargs):
+def post_save_receiver(sender, instance, created, **kwargs):
     """
     Update counter fields on related objects when a TrackingModelMixin subclass is created or modified.
     """
@@ -39,7 +39,7 @@ def post_save_receiver(sender, instance, **kwargs):
         # Update the counters on the old and/or new parents as needed
         if old_pk is not None:
             update_counter(parent_model, old_pk, counter_name, -1)
-        if new_pk is not None:
+        if new_pk is not None and (old_pk or created):
             update_counter(parent_model, new_pk, counter_name, 1)
 
 

+ 5 - 1
netbox/utilities/tests/test_counters.py

@@ -29,13 +29,17 @@ class CountersTest(TestCase):
         self.assertEqual(device1.interface_count, 2)
         self.assertEqual(device2.interface_count, 2)
 
-        Interface.objects.create(device=device1, name='Interface 5')
+        interface1 = Interface.objects.create(device=device1, name='Interface 5')
         Interface.objects.create(device=device2, name='Interface 6')
         device1.refresh_from_db()
         device2.refresh_from_db()
         self.assertEqual(device1.interface_count, 3)
         self.assertEqual(device2.interface_count, 3)
 
+        interface1.save()
+        device1.refresh_from_db()
+        self.assertEqual(device1.interface_count, 3)
+
     def test_interface_count_deletion(self):
         """
         When a tracked object (Interface) is deleted the tracking counter should be updated.