[FIX] HORILLA_VIEWS: Ensure consistent pagination by ordering queryset in record_queryset_paginator()

This commit is contained in:
Horilla
2025-07-08 15:25:06 +05:30
parent 395d7fab97
commit 5223c63eff
2 changed files with 12 additions and 6 deletions

View File

@@ -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):

View File

@@ -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")