From e24fa2ee4d36d0a72346d055fc42fec7cae28820 Mon Sep 17 00:00:00 2001 From: Jason Novinger Date: Wed, 4 Jun 2025 15:50:12 -0500 Subject: [PATCH] Fixes #19610: FieldError when sorting Tunnel Termination on tenant (#19612) --- netbox/vpn/tables/tunnels.py | 2 +- netbox/vpn/tests/test_tables.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 netbox/vpn/tests/test_tables.py diff --git a/netbox/vpn/tables/tunnels.py b/netbox/vpn/tables/tunnels.py index d23317ac0..fc8dec5e4 100644 --- a/netbox/vpn/tables/tunnels.py +++ b/netbox/vpn/tables/tunnels.py @@ -73,7 +73,7 @@ class TunnelTable(TenancyColumnsMixin, NetBoxTable): default_columns = ('pk', 'name', 'group', 'status', 'encapsulation', 'tenant', 'terminations_count') -class TunnelTerminationTable(TenancyColumnsMixin, NetBoxTable): +class TunnelTerminationTable(NetBoxTable): tunnel = tables.Column( verbose_name=_('Tunnel'), linkify=True diff --git a/netbox/vpn/tests/test_tables.py b/netbox/vpn/tests/test_tables.py new file mode 100644 index 000000000..0c7a4ae80 --- /dev/null +++ b/netbox/vpn/tests/test_tables.py @@ -0,0 +1,23 @@ +from django.test import RequestFactory, tag, TestCase + +from vpn.models import TunnelTermination +from vpn.tables import TunnelTerminationTable + + +@tag('regression') +class TunnelTerminationTableTest(TestCase): + def test_every_orderable_field_does_not_throw_exception(self): + terminations = TunnelTermination.objects.all() + fake_request = RequestFactory().get("/") + disallowed = {'actions'} + + orderable_columns = [ + column.name for column in TunnelTerminationTable(terminations).columns + if column.orderable and column.name not in disallowed + ] + + for col in orderable_columns: + for dir in ('-', ''): + table = TunnelTerminationTable(terminations) + table.order_by = f'{dir}{col}' + table.as_html(fake_request)