From e56d84ff5fb9811f58814b23678e3a3b61a1051a Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Tue, 18 Aug 2026 21:44:37 +0200 Subject: [PATCH] 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 --- netbox/dcim/views.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 5ee266c78..85755a7c4 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2869,6 +2869,10 @@ class PlatformView(GetRelatedModelsMixin, generic.ObjectView): layout = layout.SimpleLayout( breadcrumbs=[ 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=[ panels.PlatformPanel(), @@ -5404,7 +5408,11 @@ class PowerPanelView(GetRelatedModelsMixin, generic.ObjectView): layout = layout.SimpleLayout( breadcrumbs=[ 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=[ panels.PowerPanelPanel(), @@ -5583,7 +5591,11 @@ class CoolingSourceView(GetRelatedModelsMixin, generic.ObjectView): layout = layout.SimpleLayout( breadcrumbs=[ 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=[ panels.CoolingSourcePanel(),