From 323173e0e2e6102cf2ddb6d45bc815e31031ff4f Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 29 May 2025 11:11:37 -0500 Subject: [PATCH 1/4] Fixes #19487: make CircuitTermination.termination GFK not orderable --- netbox/circuits/tables/circuits.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index 3643446bd2f..95c20e4517b 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -120,7 +120,8 @@ class CircuitTerminationTable(NetBoxTable): ) termination = tables.Column( verbose_name=_('Termination Point'), - linkify=True + linkify=True, + orderable=False, ) # Termination types From 0c2ac033dd5f40baf4143e71eca4c0b139cfe425 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 29 May 2025 11:25:22 -0500 Subject: [PATCH 2/4] Add test to ensure no more broken sorting for CircuitTerminationTable --- netbox/circuits/tests/test_tables.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 netbox/circuits/tests/test_tables.py diff --git a/netbox/circuits/tests/test_tables.py b/netbox/circuits/tests/test_tables.py new file mode 100644 index 00000000000..2ab001c9bab --- /dev/null +++ b/netbox/circuits/tests/test_tables.py @@ -0,0 +1,23 @@ +from django.test import RequestFactory, tag, TestCase + +from circuits.models import CircuitTermination +from circuits.tables import CircuitTerminationTable + + +@tag('regression') +class CircuitTerminationTableTest(TestCase): + def test_every_orderable_field_does_not_throw_exception(self): + terminations = CircuitTermination.objects.all() + disallowed = {'actions', } + + orderable_columns = [ + column.name for column in CircuitTerminationTable(terminations).columns + if column.orderable and column.name not in disallowed + ] + fake_request = RequestFactory().get("/") + + for col in orderable_columns: + for dir in ('-', ''): + table = CircuitTerminationTable(terminations) + table.order_by = f'{dir}{col}' + table.as_html(fake_request) From 197554bff1c33a14f9a5ebf9af99056c45f0340c Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 29 May 2025 11:30:35 -0500 Subject: [PATCH 3/4] Fix CircuitTerminationTable.site_group accessor --- netbox/circuits/tables/circuits.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index 95c20e4517b..901893a77eb 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -133,7 +133,7 @@ class CircuitTerminationTable(NetBoxTable): site_group = tables.Column( verbose_name=_('Site Group'), linkify=True, - accessor='_sitegroup' + accessor='_site_group' ) region = tables.Column( verbose_name=_('Region'), From 39373fc53f05e5f4e0e3e71b76d5fcde177d40fe Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Thu, 29 May 2025 11:34:08 -0500 Subject: [PATCH 4/4] Make TunnelTerminationTable.termination GFK field non-orderable --- netbox/vpn/tables/tunnels.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/netbox/vpn/tables/tunnels.py b/netbox/vpn/tables/tunnels.py index 94f65e573f8..d23317ac048 100644 --- a/netbox/vpn/tables/tunnels.py +++ b/netbox/vpn/tables/tunnels.py @@ -89,7 +89,8 @@ class TunnelTerminationTable(TenancyColumnsMixin, NetBoxTable): ) termination = tables.Column( verbose_name=_('Tunnel interface'), - linkify=True + linkify=True, + orderable=False, ) ip_addresses = columns.ManyToManyColumn( accessor=tables.A('termination__ip_addresses'),