Skip to content

Commit 7a410df

Browse files
authored
13813 fix virtual chassis member count (#13823)
* 13813 fix virtual chassis member count * 13813 add test
1 parent 6fb9803 commit 7a410df

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

netbox/utilities/counters.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,13 @@ def post_save_receiver(sender, instance, created, **kwargs):
5252
for field_name, counter_name in get_counters_for_model(sender):
5353
parent_model = sender._meta.get_field(field_name).related_model
5454
new_pk = getattr(instance, field_name, None)
55-
old_pk = instance.tracker.get(field_name) if field_name in instance.tracker else None
55+
has_old_field = field_name in instance.tracker
56+
old_pk = instance.tracker.get(field_name) if has_old_field else None
5657

5758
# Update the counters on the old and/or new parents as needed
5859
if old_pk is not None:
5960
update_counter(parent_model, old_pk, counter_name, -1)
60-
if new_pk is not None and (old_pk or created):
61+
if new_pk is not None and (has_old_field or created):
6162
update_counter(parent_model, new_pk, counter_name, 1)
6263

6364

netbox/utilities/tests/test_counters.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,18 @@ def test_interface_count_creation(self):
3636
self.assertEqual(device1.interface_count, 3)
3737
self.assertEqual(device2.interface_count, 3)
3838

39+
# test saving an existing object - counter should not change
3940
interface1.save()
4041
device1.refresh_from_db()
4142
self.assertEqual(device1.interface_count, 3)
4243

44+
# test save where tracked object FK back pointer is None
45+
vc = VirtualChassis.objects.create(name='Virtual Chassis 1')
46+
device1.virtual_chassis = vc
47+
device1.save()
48+
vc.refresh_from_db()
49+
self.assertEqual(vc.member_count, 1)
50+
4351
def test_interface_count_deletion(self):
4452
"""
4553
When a tracked object (Interface) is deleted the tracking counter should be updated.

0 commit comments

Comments
 (0)