mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 18:08:38 -06:00
13813 fix virtual chassis member count (#13823)
* 13813 fix virtual chassis member count * 13813 add test
This commit is contained in:
parent
6fb980349f
commit
7a410dfd00
@ -52,12 +52,13 @@ def post_save_receiver(sender, instance, created, **kwargs):
|
|||||||
for field_name, counter_name in get_counters_for_model(sender):
|
for field_name, counter_name in get_counters_for_model(sender):
|
||||||
parent_model = sender._meta.get_field(field_name).related_model
|
parent_model = sender._meta.get_field(field_name).related_model
|
||||||
new_pk = getattr(instance, field_name, None)
|
new_pk = getattr(instance, field_name, None)
|
||||||
old_pk = instance.tracker.get(field_name) if field_name in instance.tracker else None
|
has_old_field = field_name in instance.tracker
|
||||||
|
old_pk = instance.tracker.get(field_name) if has_old_field else None
|
||||||
|
|
||||||
# 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 and (old_pk or created):
|
if new_pk is not None and (has_old_field or created):
|
||||||
update_counter(parent_model, new_pk, counter_name, 1)
|
update_counter(parent_model, new_pk, counter_name, 1)
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,10 +36,18 @@ class CountersTest(TestCase):
|
|||||||
self.assertEqual(device1.interface_count, 3)
|
self.assertEqual(device1.interface_count, 3)
|
||||||
self.assertEqual(device2.interface_count, 3)
|
self.assertEqual(device2.interface_count, 3)
|
||||||
|
|
||||||
|
# test saving an existing object - counter should not change
|
||||||
interface1.save()
|
interface1.save()
|
||||||
device1.refresh_from_db()
|
device1.refresh_from_db()
|
||||||
self.assertEqual(device1.interface_count, 3)
|
self.assertEqual(device1.interface_count, 3)
|
||||||
|
|
||||||
|
# test save where tracked object FK back pointer is None
|
||||||
|
vc = VirtualChassis.objects.create(name='Virtual Chassis 1')
|
||||||
|
device1.virtual_chassis = vc
|
||||||
|
device1.save()
|
||||||
|
vc.refresh_from_db()
|
||||||
|
self.assertEqual(vc.member_count, 1)
|
||||||
|
|
||||||
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.
|
||||||
|
Loading…
Reference in New Issue
Block a user