2
0
Эх сурвалжийг харах

fix(ui): Add hierarchical breadcrumbs for nested objects

Display ancestor hierarchy in breadcrumbs for DeviceRole, Platform, and
PowerPanel detail views. Shows full parent chain with filtering links
to improve navigation through nested object relationships.

Fixes #22957
Martin Hauser 3 долоо хоног өмнө
parent
commit
e56d84ff5f

+ 14 - 2
netbox/dcim/views.py

@@ -2869,6 +2869,10 @@ class PlatformView(GetRelatedModelsMixin, generic.ObjectView):
     layout = layout.SimpleLayout(
     layout = layout.SimpleLayout(
         breadcrumbs=[
         breadcrumbs=[
             Breadcrumb('manufacturer', url=filtered_list_url('dcim:platform_list', 'manufacturer_id')),
             Breadcrumb('manufacturer', url=filtered_list_url('dcim:platform_list', 'manufacturer_id')),
+            Breadcrumb(
+                lambda o: o.get_ancestors(),
+                url=filtered_list_url('dcim:platform_list', 'parent_id'),
+            ),
         ],
         ],
         left_panels=[
         left_panels=[
             panels.PlatformPanel(),
             panels.PlatformPanel(),
@@ -5404,7 +5408,11 @@ class PowerPanelView(GetRelatedModelsMixin, generic.ObjectView):
     layout = layout.SimpleLayout(
     layout = layout.SimpleLayout(
         breadcrumbs=[
         breadcrumbs=[
             Breadcrumb('site', url=filtered_list_url('dcim:powerpanel_list', 'site_id')),
             Breadcrumb('site', url=filtered_list_url('dcim:powerpanel_list', 'site_id')),
-            Breadcrumb('location'),
+            Breadcrumb(
+                lambda o: o.location.get_ancestors() if o.location else [],
+                url=filtered_list_url('dcim:powerpanel_list', 'location_id'),
+            ),
+            Breadcrumb('location', url=filtered_list_url('dcim:powerpanel_list', 'location_id')),
         ],
         ],
         left_panels=[
         left_panels=[
             panels.PowerPanelPanel(),
             panels.PowerPanelPanel(),
@@ -5583,7 +5591,11 @@ class CoolingSourceView(GetRelatedModelsMixin, generic.ObjectView):
     layout = layout.SimpleLayout(
     layout = layout.SimpleLayout(
         breadcrumbs=[
         breadcrumbs=[
             Breadcrumb('site', url=filtered_list_url('dcim:coolingsource_list', 'site_id')),
             Breadcrumb('site', url=filtered_list_url('dcim:coolingsource_list', 'site_id')),
-            Breadcrumb('location'),
+            Breadcrumb(
+                lambda o: o.location.get_ancestors() if o.location else [],
+                url=filtered_list_url('dcim:coolingsource_list', 'location_id'),
+            ),
+            Breadcrumb('location', url=filtered_list_url('dcim:coolingsource_list', 'location_id')),
         ],
         ],
         left_panels=[
         left_panels=[
             panels.CoolingSourcePanel(),
             panels.CoolingSourcePanel(),