Enforce ordering only when queryset is not ordered

This commit is contained in:
Ülgen Sarıkavak 2025-11-02 14:00:11 +03:00
parent d692b87a2b
commit 45e66ec24e
2 changed files with 8 additions and 6 deletions

View File

@ -624,10 +624,11 @@ class CursorPagination(BasePagination):
(offset, reverse, current_position) = self.cursor
# Cursor pagination always enforces an ordering.
if reverse:
queryset = queryset.order_by(*_reverse_ordering(self.ordering))
else:
queryset = queryset.order_by(*self.ordering)
if not queryset.ordered:
if reverse:
queryset = queryset.order_by(*_reverse_ordering(self.ordering))
else:
queryset = queryset.order_by(*self.ordering)
# If we have a cursor with a fixed position then filter by that.
if current_position is not None:

View File

@ -969,8 +969,9 @@ class TestCursorPagination(CursorPaginationTestsMixin):
self.created = idx
class MockQuerySet:
def __init__(self, items):
def __init__(self, items, ordered=False):
self.items = items
self.ordered = ordered
def filter(self, created__gt=None, created__lt=None):
if created__gt is not None:
@ -987,7 +988,7 @@ class TestCursorPagination(CursorPaginationTestsMixin):
def order_by(self, *ordering):
if ordering[0].startswith('-'):
return MockQuerySet(list(reversed(self.items)))
return MockQuerySet(list(reversed(self.items)), ordered=True)
return self
def __getitem__(self, sliced):