From 7df062d590a29621f368bd54b9391d0713b06440 Mon Sep 17 00:00:00 2001 From: Aditya Sharma <100428589+adionit7@users.noreply.github.com> Date: Thu, 12 Feb 2026 04:51:49 +0530 Subject: [PATCH] Fixes #21358: Prevent exception when sorting by Token column (#21391) Mark the `token` TemplateColumn as non-orderable since it maps to a Python property rather than a database field, causing a FieldError when django-tables2 attempts to sort by it. Add a regression test for TokenTable following the existing pattern in circuits and vpn test suites. --- netbox/users/tables.py | 1 + netbox/users/tests/test_tables.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 netbox/users/tests/test_tables.py diff --git a/netbox/users/tables.py b/netbox/users/tables.py index fd6e050b9..0470fdd0d 100644 --- a/netbox/users/tables.py +++ b/netbox/users/tables.py @@ -24,6 +24,7 @@ class TokenTable(NetBoxTable): token = columns.TemplateColumn( verbose_name=_('token'), template_code=TOKEN, + orderable=False, ) enabled = columns.BooleanColumn( verbose_name=_('Enabled') diff --git a/netbox/users/tests/test_tables.py b/netbox/users/tests/test_tables.py new file mode 100644 index 000000000..0ac51e45e --- /dev/null +++ b/netbox/users/tests/test_tables.py @@ -0,0 +1,24 @@ +from django.test import RequestFactory, tag, TestCase + +from users.models import Token +from users.tables import TokenTable + + +class TokenTableTest(TestCase): + @tag('regression') + def test_every_orderable_field_does_not_throw_exception(self): + tokens = Token.objects.all() + disallowed = {'actions'} + + orderable_columns = [ + column.name for column in TokenTable(tokens).columns + if column.orderable and column.name not in disallowed + ] + fake_request = RequestFactory().get("/") + + for col in orderable_columns: + for direction in ('-', ''): + with self.subTest(col=col, direction=direction): + table = TokenTable(tokens) + table.order_by = f'{direction}{col}' + table.as_html(fake_request)