Explorar o código

Fixes: #18263 - Iterate through a freshly queried set of CableTerminations to find endpoints in update_connected_endpoints (#18264)

* Iterate through a freshly queried set of CableTerminations to find endpoints in update_connected_endpoints

* Add defensive break if q_filter has not been populated
bctiemann hai 1 ano
pai
achega
c9ee699633
Modificáronse 2 ficheiros con 6 adicións e 1 borrados
  1. 4 0
      netbox/dcim/models/cables.py
  2. 2 1
      netbox/dcim/signals.py

+ 4 - 0
netbox/dcim/models/cables.py

@@ -607,6 +607,10 @@ class CablePath(models.Model):
                     cable_end = 'A' if lct.cable_end == 'B' else 'B'
                     q_filter |= Q(cable=lct.cable, cable_end=cable_end)
 
+                # Make sure this filter has been populated; if not, we have probably been given invalid data
+                if not q_filter:
+                    break
+
                 remote_cable_terminations = CableTermination.objects.filter(q_filter)
                 remote_terminations = [ct.termination for ct in remote_cable_terminations]
             else:

+ 2 - 1
netbox/dcim/signals.py

@@ -85,7 +85,8 @@ def update_connected_endpoints(instance, created, raw=False, **kwargs):
     if instance._terminations_modified:
         a_terminations = []
         b_terminations = []
-        for t in instance.terminations.all():
+        # Note: instance.terminations.all() is not safe to use here as it might be stale
+        for t in CableTermination.objects.filter(cable=instance):
             if t.cable_end == CableEndChoices.SIDE_A:
                 a_terminations.append(t.termination)
             else: