From 843c3ccf9a9d811faec7c49ff9300d44e3d68ca9 Mon Sep 17 00:00:00 2001 From: Peter Pfeufer Date: Tue, 20 Jan 2026 23:13:18 +0100 Subject: [PATCH] [FIX] Count filtered records before applying the limit --- allianceauth/framework/datatables.py | 5 ++++- allianceauth/framework/tests/test_datatables.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/allianceauth/framework/datatables.py b/allianceauth/framework/datatables.py index 387f5cfe..218f66e7 100644 --- a/allianceauth/framework/datatables.py +++ b/allianceauth/framework/datatables.py @@ -195,6 +195,9 @@ class DataTablesView(View): *self.get_order(table_conf) ) + # Get the count after filtering + qs_count = qs.count() + # build output if length > 0: qs = qs[start:limit] @@ -210,7 +213,7 @@ class DataTablesView(View): datatables_data = {} datatables_data['draw'] = draw datatables_data['recordsTotal'] = self.get_model_qs(request, *args, **kwargs).all().count() - datatables_data['recordsFiltered'] = qs.count() + datatables_data['recordsFiltered'] = qs_count datatables_data['data'] = items return JsonResponse(datatables_data) diff --git a/allianceauth/framework/tests/test_datatables.py b/allianceauth/framework/tests/test_datatables.py index 163cbc5d..840e54a7 100644 --- a/allianceauth/framework/tests/test_datatables.py +++ b/allianceauth/framework/tests/test_datatables.py @@ -144,6 +144,16 @@ class TestDataTables(TestCase): self.assertEqual(data[0][0], "1001") self.assertEqual(data[19][0], "1020") + def test_records_filtered(self): + self.get_params["length"] = "20" + self.client.force_login(self.user) + request = self.factory.get('/fake-url/', data=self.get_params) + response = TestView() + response.setup(request) + content = json.loads(response.get(request).content) + self.assertEqual(content["recordsFiltered"], 20) + self.assertEqual(content["recordsTotal"], 20) + def test_view_global_search(self): self.get_params["search[value]"] = "1020" self.client.force_login(self.user)