diff --git a/netbox/dcim/ui/panels.py b/netbox/dcim/ui/panels.py index 4db5e958c..d26dfda45 100644 --- a/netbox/dcim/ui/panels.py +++ b/netbox/dcim/ui/panels.py @@ -38,16 +38,11 @@ class RackNumberingPanel(panels.ObjectPanel): desc_units = attrs.BooleanAttr('desc_units', label=_('Descending units')) -class RackWeightPanel(panels.ObjectPanel): - weight = attrs.NumericAttr('weight', unit_accessor='get_weight_unit_display', label=_('Weight')) - max_weight = attrs.NumericAttr('max_weight', unit_accessor='get_weight_unit_display', label=_('Maximum weight')) - - class RackPanel(panels.ObjectPanel): region = attrs.NestedObjectAttr('site.region', label=_('Region'), linkify=True) site = attrs.ObjectAttr('site', label=_('Site'), linkify=True, grouped_by='group') location = attrs.NestedObjectAttr('location', label=_('Location'), linkify=True) - facility = attrs.TextAttr('facility', label=_('Facility')) + facility = attrs.TextAttr('facility', label=_('Facility ID')) tenant = attrs.ObjectAttr('tenant', label=_('Tenant'), linkify=True, grouped_by='group') status = attrs.ChoiceAttr('status', label=_('Status')) rack_type = attrs.ObjectAttr('rack_type', label=_('Rack type'), linkify=True, grouped_by='manufacturer') @@ -60,6 +55,12 @@ class RackPanel(panels.ObjectPanel): power_utilization = attrs.UtilizationAttr('get_power_utilization', label=_('Power utilization')) +class RackWeightPanel(panels.ObjectPanel): + weight = attrs.NumericAttr('weight', unit_accessor='get_weight_unit_display', label=_('Weight')) + max_weight = attrs.NumericAttr('max_weight', unit_accessor='get_weight_unit_display', label=_('Maximum weight')) + total_weight = attrs.NumericAttr('total_weight', unit_accessor='get_weight_unit_display', label=_('Total weight')) + + class RackRolePanel(panels.OrganizationalObjectPanel): color = attrs.ColorAttr('color') diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index c0146165f..facccb65a 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -21,7 +21,7 @@ from ipam.tables import InterfaceVLANTable, VLANTranslationRuleTable from netbox.object_actions import * from netbox.ui import actions, layout from netbox.ui.panels import ( - CommentsPanel, NestedGroupObjectPanel, ObjectsTablePanel, PluginContentPanel, RelatedObjectsPanel, + CommentsPanel, NestedGroupObjectPanel, ObjectsTablePanel, PluginContentPanel, RelatedObjectsPanel, TemplatePanel, ) from netbox.views import generic from utilities.forms import ConfirmationForm @@ -1043,6 +1043,31 @@ class RackElevationListView(generic.ObjectListView): @register_model_view(Rack) class RackView(GetRelatedModelsMixin, generic.ObjectView): queryset = Rack.objects.prefetch_related('site__region', 'tenant__group', 'location', 'role') + layout = layout.Layout( + layout.Row( + layout.Column( + panels.RackPanel(), + panels.RackDimensionsPanel(_('Dimensions')), + panels.RackNumberingPanel(_('Numbering')), + panels.RackWeightPanel(_('Weight')), + CustomFieldsPanel(), + TagsPanel(), + CommentsPanel(), + ImageAttachmentsPanel(), + PluginContentPanel('left_page'), + ), + layout.Column( + TemplatePanel('dcim/panels/rack_elevations.html'), + RelatedObjectsPanel(), + PluginContentPanel('right_page'), + ), + ), + layout.Row( + layout.Column( + PluginContentPanel('full_width_page'), + ), + ), + ) def get_extra_context(self, request, instance): peer_racks = Rack.objects.restrict(request.user, 'view').filter(site=instance.site) diff --git a/netbox/netbox/ui/panels.py b/netbox/netbox/ui/panels.py index d63558b90..328ef98df 100644 --- a/netbox/netbox/ui/panels.py +++ b/netbox/netbox/ui/panels.py @@ -19,6 +19,7 @@ __all__ = ( 'RelatedObjectsPanel', 'Panel', 'PluginContentPanel', + 'TemplatePanel', ) @@ -142,6 +143,13 @@ class ObjectsTablePanel(Panel): } +class TemplatePanel(Panel): + + def __init__(self, template_name, **kwargs): + super().__init__(**kwargs) + self.template_name = template_name + + class PluginContentPanel(Panel): def __init__(self, method, **kwargs): diff --git a/netbox/templates/dcim/panels/rack_elevations.html b/netbox/templates/dcim/panels/rack_elevations.html new file mode 100644 index 000000000..550f54f3b --- /dev/null +++ b/netbox/templates/dcim/panels/rack_elevations.html @@ -0,0 +1,22 @@ +{% load i18n %} +