From c5471a1f6efa66b8e9570a82585e604793a42ca0 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Wed, 31 Dec 2025 15:48:37 -0500 Subject: [PATCH] Define UI layout for Module view --- netbox/dcim/ui/panels.py | 10 +++++++ netbox/dcim/views.py | 15 +++++++++++ netbox/templates/dcim/module.html | 2 +- netbox/templates/dcim/panels/module_type.html | 27 +++++++++++++++++++ 4 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 netbox/templates/dcim/panels/module_type.html diff --git a/netbox/dcim/ui/panels.py b/netbox/dcim/ui/panels.py index a25ad11ce..3e2e2983c 100644 --- a/netbox/dcim/ui/panels.py +++ b/netbox/dcim/ui/panels.py @@ -151,6 +151,16 @@ class DeviceTypePanel(panels.ObjectAttributesPanel): rear_image = attrs.ImageAttr('rear_image') +class ModulePanel(panels.ObjectAttributesPanel): + device = attrs.RelatedObjectAttr('device', linkify=True) + device_type = attrs.RelatedObjectAttr('device.device_type', linkify=True, grouped_by='manufacturer') + module_bay = attrs.NestedObjectAttr('module_bay') + status = attrs.ChoiceAttr('status') + description = attrs.TextAttr('description') + serial = attrs.TextAttr('serial', label=_('Serial number'), style='font-monospace', copy_button=True) + asset_tag = attrs.TextAttr('asset_tag', style='font-monospace', copy_button=True) + + class ModuleTypeProfilePanel(panels.ObjectAttributesPanel): name = attrs.TextAttr('name') description = attrs.TextAttr('description') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index a948f098e..908857dfa 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -2821,6 +2821,21 @@ class ModuleListView(generic.ObjectListView): @register_model_view(Module) class ModuleView(GetRelatedModelsMixin, generic.ObjectView): queryset = Module.objects.all() + layout = layout.SimpleLayout( + left_panels=[ + panels.ModulePanel(), + TagsPanel(), + CommentsPanel(), + ], + right_panels=[ + Panel( + title=_('Module Type'), + template_name='dcim/panels/module_type.html', + ), + RelatedObjectsPanel(), + CustomFieldsPanel(), + ], + ) def get_extra_context(self, request, instance): return { diff --git a/netbox/templates/dcim/module.html b/netbox/templates/dcim/module.html index f9aecb3f0..4b013039e 100644 --- a/netbox/templates/dcim/module.html +++ b/netbox/templates/dcim/module.html @@ -47,7 +47,7 @@ {% endif %} {% endblock %} -{% block content %} +{% block contentx %}
diff --git a/netbox/templates/dcim/panels/module_type.html b/netbox/templates/dcim/panels/module_type.html new file mode 100644 index 000000000..7fb90470b --- /dev/null +++ b/netbox/templates/dcim/panels/module_type.html @@ -0,0 +1,27 @@ +{% extends "ui/panels/_base.html" %} +{% load helpers i18n %} + +{% block panel_content %} + + + + + + + + + + {% for k, v in object.module_type.attributes.items %} + + + + + {% endfor %} +
{% trans "Manufacturer" %}{{ object.module_type.manufacturer|linkify }}
{% trans "Model" %}{{ object.module_type|linkify }}
{{ k }} + {% if v is True or v is False %} + {% checkmark v %} + {% else %} + {{ v|placeholder }} + {% endif %} +
+{% endblock panel_content %}