Bladeren bron

20738 update vc_position in delete not signal handler

Arthur 3 maanden geleden
bovenliggende
commit
264b40a269
2 gewijzigde bestanden met toevoegingen van 8 en 14 verwijderingen
  1. 7 1
      netbox/dcim/models/devices.py
  2. 1 13
      netbox/dcim/signals.py

+ 7 - 1
netbox/dcim/models/devices.py

@@ -1154,7 +1154,6 @@ class VirtualChassis(PrimaryModel):
             })
             })
 
 
     def delete(self, *args, **kwargs):
     def delete(self, *args, **kwargs):
-
         # Check for LAG interfaces split across member chassis
         # Check for LAG interfaces split across member chassis
         interfaces = Interface.objects.filter(
         interfaces = Interface.objects.filter(
             device__in=self.members.all(),
             device__in=self.members.all(),
@@ -1168,6 +1167,13 @@ class VirtualChassis(PrimaryModel):
                 "interfaces."
                 "interfaces."
             ).format(self=self, interfaces=InterfaceSpeedChoices))
             ).format(self=self, interfaces=InterfaceSpeedChoices))
 
 
+        # Clear vc_position and vc_priority on member devices BEFORE calling super().delete()
+        # This must be done here because on_delete=SET_NULL executes before pre_delete signal
+        for device in members_list:
+            device.vc_position = None
+            device.vc_priority = None
+            device.save()
+
         return super().delete(*args, **kwargs)
         return super().delete(*args, **kwargs)
 
 
 
 

+ 1 - 13
netbox/dcim/signals.py

@@ -1,6 +1,6 @@
 import logging
 import logging
 
 
-from django.db.models.signals import post_save, post_delete, pre_delete
+from django.db.models.signals import post_save, post_delete
 from django.dispatch import receiver
 from django.dispatch import receiver
 
 
 from dcim.choices import CableEndChoices, LinkStatusChoices
 from dcim.choices import CableEndChoices, LinkStatusChoices
@@ -85,18 +85,6 @@ def assign_virtualchassis_master(instance, created, **kwargs):
         master.save()
         master.save()
 
 
 
 
-@receiver(pre_delete, sender=VirtualChassis)
-def clear_virtualchassis_members(instance, **kwargs):
-    """
-    When a VirtualChassis is deleted, nullify the vc_position and vc_priority fields of its prior members.
-    """
-    devices = Device.objects.filter(virtual_chassis=instance.pk)
-    for device in devices:
-        device.vc_position = None
-        device.vc_priority = None
-        device.save()
-
-
 #
 #
 # Cables
 # Cables
 #
 #