Kaynağa Gözat

Merge pull request #10227 from netbox-community/10217-cable-trace-split

Fixes #10217: Handle exception when trace splits to multiple rear ports
Jeremy Stretch 3 yıl önce
ebeveyn
işleme
8c35ebbb7e

+ 9 - 3
netbox/dcim/models/cables.py

@@ -677,6 +677,12 @@ class CablePath(models.Model):
         """
         Return all available next segments in a split cable path.
         """
-        rearports = self.path_objects[-1]
-
-        return FrontPort.objects.filter(rear_port__in=rearports)
+        nodes = self.path_objects[-1]
+
+        # RearPort splitting to multiple FrontPorts with no stack position
+        if type(nodes[0]) is RearPort:
+            return FrontPort.objects.filter(rear_port__in=nodes)
+        # Cable terminating to multiple FrontPorts mapped to different
+        # RearPorts connected to different cables
+        elif type(nodes[0]) is FrontPort:
+            return RearPort.objects.filter(pk__in=[fp.rear_port_id for fp in nodes])

+ 12 - 10
netbox/templates/dcim/cable_trace.html

@@ -22,16 +22,18 @@
                     <h3 class="text-danger">Path split!</h3>
                     <p>Select a node below to continue:</p>
                     <ul class="text-start">
-                        {% for next_node in path.get_split_nodes %}
-                            {% if next_node.cable %}
-                                <li>
-                                    <a href="{% url 'dcim:frontport_trace' pk=next_node.pk %}">{{ next_node }}</a>
-                                    (Cable {{ next_node.cable|linkify }})
-                                </li>
-                            {% else %}
-                                <li class="text-muted">{{ next_node }}</li>
-                            {% endif %}
-                        {% endfor %}
+                      {% for next_node in path.get_split_nodes %}
+                        {% if next_node.cable %}
+                          {% with viewname=next_node|viewname:"trace" %}
+                            <li>
+                              <a href="{% url viewname pk=next_node.pk %}">{{ next_node|meta:"verbose_name"|bettertitle }} {{ next_node }}</a>
+                              (Cable {{ next_node.cable|linkify }})
+                            </li>
+                          {% endwith %}
+                        {% else %}
+                          <li class="text-muted">{{ next_node }}</li>
+                        {% endif %}
+                      {% endfor %}
                     </ul>
                 {% else %}
                     <h3 class="text-center text-success">Trace Completed</h3>