Răsfoiți Sursa

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.
Aditya Sharma 2 zile în urmă
părinte
comite
7df062d590
2 a modificat fișierele cu 25 adăugiri și 0 ștergeri
  1. 1 0
      netbox/users/tables.py
  2. 24 0
      netbox/users/tests/test_tables.py

+ 1 - 0
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')

+ 24 - 0
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)