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>
This commit is contained in:
Arthur Hanson 2023-08-29 12:31:13 -07:00 committed by GitHub
parent 83536fbb23
commit 065a40dfb3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 3 deletions

View File

@ -27,7 +27,7 @@ def update_counter(model, pk, counter_name, value):
# Signal handlers # 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. 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 # Update the counters on the old and/or new parents as needed
if old_pk is not None: if old_pk is not None:
update_counter(parent_model, old_pk, counter_name, -1) 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) update_counter(parent_model, new_pk, counter_name, 1)

View File

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