From bd777cb2abdcc02beff673d899f8edf7e3e93ab1 Mon Sep 17 00:00:00 2001 From: matthewhegarty Date: Mon, 17 Jun 2024 14:33:17 +0100 Subject: [PATCH 1/2] standardised params for get_queryset_count_before / get_queryset_count_after --- rest_framework_datatables/django_filters/backends.py | 10 +++++----- tests/test_django_filter_backend.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/rest_framework_datatables/django_filters/backends.py b/rest_framework_datatables/django_filters/backends.py index bf53482..6c6061d 100644 --- a/rest_framework_datatables/django_filters/backends.py +++ b/rest_framework_datatables/django_filters/backends.py @@ -22,13 +22,13 @@ def filter_queryset(self, request, queryset, view): if not self.check_renderer_format(request): return queryset - count = self.get_queryset_count_before(view.get_queryset()) + count = self.get_queryset_count_before(request, view.get_queryset(), view) self.set_count_before(view, count) # parsed datatables_query will be an attribute of the filterset filterset = self.get_filterset(request, queryset, view) if filterset is None: - count = self.get_queryset_count_after(queryset) + count = self.get_queryset_count_after(request, queryset, view) self.set_count_after(view, count) return queryset @@ -39,7 +39,7 @@ def filter_queryset(self, request, queryset, view): if global_q: queryset = queryset.filter(global_q).distinct() - count = self.get_queryset_count_after(queryset) + count = self.get_queryset_count_after(request, queryset, view) self.set_count_after(view, count) # TODO Can we use OrderingFilter, maybe in DatatablesFilterSet, by @@ -98,7 +98,7 @@ def get_ordering(self, request, view, filterset): self.append_additional_ordering(ret, view) return ret - def get_queryset_count_before(self, queryset): + def get_queryset_count_before(self, request, queryset, view): """ Provide an overrideable method to return a custom count. This can be useful for very large tables, as calls to model.count() @@ -106,7 +106,7 @@ def get_queryset_count_before(self, queryset): """ return queryset.count() - def get_queryset_count_after(self, queryset): + def get_queryset_count_after(self, request, queryset, view): """ See :meth:`~rest_framework_datatables.django_filters.backends.DatatablesFilterBackend.get_queryset_count_before`. diff --git a/tests/test_django_filter_backend.py b/tests/test_django_filter_backend.py index cb0cc22..e543212 100644 --- a/tests/test_django_filter_backend.py +++ b/tests/test_django_filter_backend.py @@ -30,10 +30,10 @@ class CustomDatatablesFilterBackend(DatatablesFilterBackend): Override before and after counts to demonstrate performance fix. """ - def get_queryset_count_before(self, queryset): + def get_queryset_count_before(self, request, queryset, view): return 999 - def get_queryset_count_after(self, queryset): + def get_queryset_count_after(self, request, queryset, view): return 99 From 7a60e854f165c952dddf86a17c1cea0f606880e0 Mon Sep 17 00:00:00 2001 From: matthewhegarty Date: Tue, 18 Jun 2024 13:23:41 +0100 Subject: [PATCH 2/2] added line break to address 80 char limit --- rest_framework_datatables/django_filters/backends.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rest_framework_datatables/django_filters/backends.py b/rest_framework_datatables/django_filters/backends.py index 6c6061d..dea41da 100644 --- a/rest_framework_datatables/django_filters/backends.py +++ b/rest_framework_datatables/django_filters/backends.py @@ -39,7 +39,9 @@ def filter_queryset(self, request, queryset, view): if global_q: queryset = queryset.filter(global_q).distinct() - count = self.get_queryset_count_after(request, queryset, view) + count = self.get_queryset_count_after( + request, queryset, view + ) self.set_count_after(view, count) # TODO Can we use OrderingFilter, maybe in DatatablesFilterSet, by