diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 83de5ca0f..fed8041bb 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -11,8 +11,9 @@ from utilities.tables import ( TagColumn, ToggleColumn, ) from .template_code import ( - CABLETERMINATION, CONSOLEPORT_BUTTONS, CONSOLESERVERPORT_BUTTONS, DEVICE_LINK, FRONTPORT_BUTTONS, INTERFACE_BUTTONS, - INTERFACE_IPADDRESSES, INTERFACE_TAGGED_VLANS, POWEROUTLET_BUTTONS, POWERPORT_BUTTONS, REARPORT_BUTTONS, + CABLETERMINATION, CONSOLEPORT_BUTTONS, CONSOLESERVERPORT_BUTTONS, DEVICE_LINK, DEVICEBAY_BUTTONS, FRONTPORT_BUTTONS, + INTERFACE_BUTTONS, INTERFACE_IPADDRESSES, INTERFACE_TAGGED_VLANS, POWEROUTLET_BUTTONS, POWERPORT_BUTTONS, + REARPORT_BUTTONS, ) __all__ = ( @@ -21,6 +22,7 @@ __all__ = ( 'DeviceBayTable', 'DeviceConsolePortTable', 'DeviceConsoleServerPortTable', + 'DeviceDeviceBayTable', 'DeviceFrontPortTable', 'DeviceImportTable', 'DeviceInterfaceTable', @@ -464,7 +466,7 @@ class DeviceFrontPortTable(FrontPortTable): model = FrontPort fields = ( 'pk', 'name', 'label', 'type', 'rear_port', 'rear_port_position', 'description', 'cable', 'cable_peer', - 'connection', 'tags', 'actions', + 'tags', 'actions', ) default_columns = ( 'pk', 'name', 'label', 'type', 'rear_port', 'rear_port_position', 'description', 'cable', 'cable_peer', @@ -500,8 +502,7 @@ class DeviceRearPortTable(RearPortTable): class Meta(DeviceComponentTable.Meta): model = RearPort fields = ( - 'pk', 'name', 'label', 'type', 'positions', 'description', 'cable', 'cable_peer', 'connection', 'tags', - 'actions', + 'pk', 'name', 'label', 'type', 'positions', 'description', 'cable', 'cable_peer', 'tags', 'actions', ) default_columns = ( 'pk', 'name', 'label', 'type', 'positions', 'description', 'cable', 'cable_peer', 'actions', @@ -525,6 +526,27 @@ class DeviceBayTable(DeviceComponentTable): default_columns = ('pk', 'device', 'name', 'label', 'installed_device', 'description') +class DeviceDeviceBayTable(DeviceBayTable): + name = tables.TemplateColumn( + template_code=' {{ value }}' + ) + actions = ButtonsColumn( + model=DeviceBay, + buttons=('edit', 'delete'), + prepend_template=DEVICEBAY_BUTTONS + ) + + class Meta(DeviceComponentTable.Meta): + model = DeviceBay + fields = ( + 'pk', 'name', 'label', 'installed_device', 'description', 'tags', 'actions', + ) + default_columns = ( + 'pk', 'name', 'label', 'installed_device', 'description', 'actions', + ) + + class InventoryItemTable(DeviceComponentTable): manufacturer = tables.Column( linkify=True diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 8bcf87ff9..ac8ecca76 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -200,3 +200,17 @@ REARPORT_BUTTONS = """ {% endif %} """ + +DEVICEBAY_BUTTONS = """ +{% if perms.dcim.change_devicebay %} + {% if record.installed_device %} + + + + {% else %} + + + + {% endif %} +{% endif %} +""" diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index 953ef4d99..54c29e836 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1078,6 +1078,9 @@ class DeviceView(ObjectView): devicebays = DeviceBay.objects.restrict(request.user, 'view').filter(device=device).prefetch_related( 'installed_device__device_type__manufacturer', ) + devicebay_table = tables.DeviceDeviceBayTable(devicebays, orderable=False) + if request.user.has_perm('dcim.change_devicebay') or request.user.has_perm('dcim.delete_devicebay'): + devicebay_table.columns.show('pk') # Inventory items inventoryitems = InventoryItem.objects.restrict(request.user, 'view').filter( @@ -1108,7 +1111,7 @@ class DeviceView(ObjectView): 'interface_table': interface_table, 'frontport_table': frontport_table, 'rearport_table': rearport_table, - 'devicebays': devicebays, + 'devicebay_table': devicebay_table, 'inventoryitems': inventoryitems, 'services': services, 'secrets': secrets, diff --git a/netbox/templates/dcim/device.html b/netbox/templates/dcim/device.html index 684805cc0..ae8636be1 100644 --- a/netbox/templates/dcim/device.html +++ b/netbox/templates/dcim/device.html @@ -143,7 +143,7 @@ Power Outlets {% badge poweroutlet_table.rows|length %}
  • - Device Bays {% badge devicebays|length %} + Device Bays {% badge devicebay_table.rows|length %}
  • Inventory {% badge inventoryitems|length %} @@ -754,36 +754,14 @@
    Device Bays
    - - - - {% if perms.dcim.change_devicebay or perms.dcim.delete_devicebay %} - - {% endif %} - - - - - - - - - {% for devicebay in devicebays %} - {% include 'dcim/inc/devicebay.html' %} - {% empty %} - - - - {% endfor %} - -
    NameStatusDescriptionInstalled Device
    — No device bays defined —
    + {% include 'responsive_table.html' with table=devicebay_table %}