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 "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 }} | -