From 95d0ca56a7292dc6db65b945b83eb4caec2f16b4 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Wed, 4 Jun 2025 11:48:23 -0500 Subject: [PATCH] Fixes #19487: fix ordering issues with CircuitTerminationTable/TunnelTerminationTable configuration (#19600) * Fixes #19487: make CircuitTermination.termination GFK not orderable * Add test to ensure no more broken sorting for CircuitTerminationTable * Fix CircuitTerminationTable.site_group accessor * Make TunnelTerminationTable.termination GFK field non-orderable --- netbox/circuits/tables/circuits.py | 5 +++-- netbox/circuits/tests/test_tables.py | 23 +++++++++++++++++++++++ netbox/vpn/tables/tunnels.py | 3 ++- 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 netbox/circuits/tests/test_tables.py diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index 3643446bd..901893a77 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 @@ -132,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'), diff --git a/netbox/circuits/tests/test_tables.py b/netbox/circuits/tests/test_tables.py new file mode 100644 index 000000000..2ab001c9b --- /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) diff --git a/netbox/vpn/tables/tunnels.py b/netbox/vpn/tables/tunnels.py index 94f65e573..d23317ac0 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'),