From 06d53ef10b0ef9639cfbdde05e72280b352da737 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 31 Dec 2025 15:29:48 -0500 Subject: [PATCH] Define UI layout for DeviceRole view --- netbox/dcim/ui/panels.py | 6 +++ netbox/dcim/views.py | 21 +++++++++ netbox/templates/dcim/devicerole.html | 64 --------------------------- 3 files changed, 27 insertions(+), 64 deletions(-) diff --git a/netbox/dcim/ui/panels.py b/netbox/dcim/ui/panels.py index 6d0270e25..c6122de2e 100644 --- a/netbox/dcim/ui/panels.py +++ b/netbox/dcim/ui/panels.py @@ -129,6 +129,12 @@ class DeviceDimensionsPanel(panels.ObjectAttributesPanel): total_weight = attrs.TemplatedAttr('total_weight', template_name='dcim/device/attrs/total_weight.html') +class DeviceRolePanel(panels.NestedGroupObjectPanel): + color = attrs.ColorAttr('color') + vm_role = attrs.BooleanAttr('vm_role', label=_('VM role')) + config_template = attrs.RelatedObjectAttr('config_template', linkify=True) + + class DeviceTypePanel(panels.ObjectAttributesPanel): manufacturer = attrs.RelatedObjectAttr('manufacturer', linkify=True) model = attrs.TextAttr('model') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 84b14be1c..4a320a275 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2310,6 +2310,27 @@ class DeviceRoleListView(generic.ObjectListView): @register_model_view(DeviceRole) class DeviceRoleView(GetRelatedModelsMixin, generic.ObjectView): queryset = DeviceRole.objects.all() + layout = layout.SimpleLayout( + left_panels=[ + panels.DeviceRolePanel(), + TagsPanel(), + ], + right_panels=[ + RelatedObjectsPanel(), + CustomFieldsPanel(), + CommentsPanel(), + ], + bottom_panels=[ + ObjectsTablePanel( + model='dcim.DeviceRole', + title=_('Child Device Roles'), + filters={'parent_id': lambda ctx: ctx['object'].pk}, + actions=[ + actions.AddObject('dcim.DeviceRole', url_params={'parent': lambda ctx: ctx['object'].pk}), + ], + ), + ] + ) def get_extra_context(self, request, instance): return { diff --git a/netbox/templates/dcim/devicerole.html b/netbox/templates/dcim/devicerole.html index 5cce95d23..72fdbd3ed 100644 --- a/netbox/templates/dcim/devicerole.html +++ b/netbox/templates/dcim/devicerole.html @@ -15,67 +15,3 @@ {% endif %} {% endblock extra_controls %} - -{% block content %} -
-
-
-

{% trans "Device Role" %}

- - - - - - - - - - - - - - - - - - - - - - - - - -
{% trans "Name" %}{{ object.name }}
{% trans "Description" %}{{ object.description|placeholder }}
{% trans "Parent" %}{{ object.parent|linkify|placeholder }}
{% trans "Color" %} -   -
{% trans "VM Role" %}{% checkmark object.vm_role %}
{% trans "Config Template" %}{{ object.config_template|linkify|placeholder }}
-
- {% include 'inc/panels/tags.html' %} - {% plugin_left_page object %} -
-
- {% include 'inc/panels/related_objects.html' %} - {% include 'inc/panels/custom_fields.html' %} - {% include 'inc/panels/comments.html' %} - {% plugin_right_page object %} -
-
-
-
-
-

- {% trans "Child Device Roles" %} - {% if perms.dcim.add_devicerole %} - - {% endif %} -

- {% htmx_table 'dcim:devicerole_list' parent_id=object.pk %} -
- {% plugin_full_width_page object %} -
-
-{% endblock %}