diff --git a/docs/release-notes/version-2.11.md b/docs/release-notes/version-2.11.md
index 9312c2ce0..98b62c1f7 100644
--- a/docs/release-notes/version-2.11.md
+++ b/docs/release-notes/version-2.11.md
@@ -4,6 +4,7 @@
### Enhancements
+* [#6161](https://github.com/netbox-community/netbox/issues/6161) - Enable ordering of device component tables
* [#6179](https://github.com/netbox-community/netbox/issues/6179) - Enable natural ordering for virtual machines
* [#6189](https://github.com/netbox-community/netbox/issues/6189) - Add ability to search for locations by name or description
* [#6190](https://github.com/netbox-community/netbox/issues/6190) - Allow filtering devices with no location assigned
diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py
index cc1d78fa3..4f7c05c71 100644
--- a/netbox/dcim/tables/devices.py
+++ b/netbox/dcim/tables/devices.py
@@ -291,6 +291,7 @@ class ConsolePortTable(DeviceComponentTable, PathEndpointTable):
class DeviceConsolePortTable(ConsolePortTable):
name = tables.TemplateColumn(
template_code=' {{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -335,6 +336,7 @@ class DeviceConsoleServerPortTable(ConsoleServerPortTable):
name = tables.TemplateColumn(
template_code=' '
'{{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -379,6 +381,7 @@ class DevicePowerPortTable(PowerPortTable):
name = tables.TemplateColumn(
template_code=' '
'{{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -428,6 +431,7 @@ class PowerOutletTable(DeviceComponentTable, PathEndpointTable):
class DevicePowerOutletTable(PowerOutletTable):
name = tables.TemplateColumn(
template_code=' {{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -492,6 +496,7 @@ class DeviceInterfaceTable(InterfaceTable):
template_code=' {{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
parent = tables.Column(
@@ -555,6 +560,7 @@ class DeviceFrontPortTable(FrontPortTable):
name = tables.TemplateColumn(
template_code=' '
'{{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -602,6 +608,7 @@ class DeviceRearPortTable(RearPortTable):
name = tables.TemplateColumn(
template_code=' '
'{{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -651,6 +658,7 @@ class DeviceDeviceBayTable(DeviceBayTable):
name = tables.TemplateColumn(
template_code=' {{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
@@ -698,6 +706,7 @@ class DeviceInventoryItemTable(InventoryItemTable):
name = tables.TemplateColumn(
template_code=''
'{{ value }}',
+ order_by=Accessor('_name'),
attrs={'td': {'class': 'text-nowrap'}}
)
actions = ButtonsColumn(
diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py
index 7f0d6d4c3..a9aee80f1 100644
--- a/netbox/dcim/views.py
+++ b/netbox/dcim/views.py
@@ -1319,8 +1319,7 @@ class DeviceConsolePortsView(generic.ObjectView):
)
consoleport_table = tables.DeviceConsolePortTable(
data=consoleports,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_consoleport') or request.user.has_perm('dcim.delete_consoleport'):
consoleport_table.columns.show('pk')
@@ -1344,8 +1343,7 @@ class DeviceConsoleServerPortsView(generic.ObjectView):
)
consoleserverport_table = tables.DeviceConsoleServerPortTable(
data=consoleserverports,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_consoleserverport') or \
request.user.has_perm('dcim.delete_consoleserverport'):
@@ -1368,8 +1366,7 @@ class DevicePowerPortsView(generic.ObjectView):
)
powerport_table = tables.DevicePowerPortTable(
data=powerports,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_powerport') or request.user.has_perm('dcim.delete_powerport'):
powerport_table.columns.show('pk')
@@ -1391,8 +1388,7 @@ class DevicePowerOutletsView(generic.ObjectView):
)
poweroutlet_table = tables.DevicePowerOutletTable(
data=poweroutlets,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_poweroutlet') or request.user.has_perm('dcim.delete_poweroutlet'):
poweroutlet_table.columns.show('pk')
@@ -1416,8 +1412,7 @@ class DeviceInterfacesView(generic.ObjectView):
)
interface_table = tables.DeviceInterfaceTable(
data=interfaces,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_interface') or request.user.has_perm('dcim.delete_interface'):
interface_table.columns.show('pk')
@@ -1439,8 +1434,7 @@ class DeviceFrontPortsView(generic.ObjectView):
)
frontport_table = tables.DeviceFrontPortTable(
data=frontports,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_frontport') or request.user.has_perm('dcim.delete_frontport'):
frontport_table.columns.show('pk')
@@ -1460,8 +1454,7 @@ class DeviceRearPortsView(generic.ObjectView):
rearports = RearPort.objects.restrict(request.user, 'view').filter(device=instance).prefetch_related('cable')
rearport_table = tables.DeviceRearPortTable(
data=rearports,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_rearport') or request.user.has_perm('dcim.delete_rearport'):
rearport_table.columns.show('pk')
@@ -1483,8 +1476,7 @@ class DeviceDeviceBaysView(generic.ObjectView):
)
devicebay_table = tables.DeviceDeviceBayTable(
data=devicebays,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_devicebay') or request.user.has_perm('dcim.delete_devicebay'):
devicebay_table.columns.show('pk')
@@ -1506,8 +1498,7 @@ class DeviceInventoryView(generic.ObjectView):
).prefetch_related('manufacturer')
inventoryitem_table = tables.DeviceInventoryItemTable(
data=inventoryitems,
- user=request.user,
- orderable=False
+ user=request.user
)
if request.user.has_perm('dcim.change_inventoryitem') or request.user.has_perm('dcim.delete_inventoryitem'):
inventoryitem_table.columns.show('pk')