From 5223c63efff84e0254a5998d61693e2f34fb264e Mon Sep 17 00:00:00 2001 From: Horilla Date: Tue, 8 Jul 2025 15:25:06 +0530 Subject: [PATCH] [FIX] HORILLA_VIEWS: Ensure consistent pagination by ordering queryset in record_queryset_paginator() --- horilla/group_by.py | 14 ++++++++++---- horilla_views/cbv_methods.py | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/horilla/group_by.py b/horilla/group_by.py index fa77ef5ce..ea47401dd 100644 --- a/horilla/group_by.py +++ b/horilla/group_by.py @@ -6,12 +6,18 @@ from horilla.horilla_middlewares import _thread_locals def record_queryset_paginator(request, queryset, page_name, records_per_page=10): """ - This method is used to return the paginator entries + Returns paginated results with safe ordering. """ + # 803 + if not queryset.ordered: + if hasattr(queryset.model, "created_at"): + queryset = queryset.order_by("-created_at") + else: + queryset = queryset.order_by("-id") + page = request.GET.get(page_name) - queryset = Paginator(queryset, records_per_page) - queryset = queryset.get_page(page) - return queryset + paginator = Paginator(queryset, records_per_page) + return paginator.get_page(page) def generate_groups(request, groupers, queryset, page_name, group_field, is_fk_field): diff --git a/horilla_views/cbv_methods.py b/horilla_views/cbv_methods.py index 7ba9511fe..c4e96b056 100644 --- a/horilla_views/cbv_methods.py +++ b/horilla_views/cbv_methods.py @@ -13,7 +13,7 @@ from venv import logger from django import forms, template from django.contrib import messages from django.core.cache import cache as CACHE -from django.core.paginator import Paginator +from django.core.paginator import Page, Paginator from django.db import models from django.db.models.fields.related import ForeignKey from django.db.models.fields.related_descriptors import ( @@ -302,7 +302,7 @@ def paginator_qry(qryset, page_number, records_per_page=50): """ This method is used to paginate queryset """ - if not qryset.ordered: + if not isinstance(qryset, Page) and not qryset.ordered: qryset = ( qryset.order_by("-created_at") if hasattr(qryset.model, "created_at")