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,6 +624,7 @@ class CursorPagination(BasePagination):
(offset, reverse, current_position) = self.cursor (offset, reverse, current_position) = self.cursor
# Cursor pagination always enforces an ordering. # Cursor pagination always enforces an ordering.
if not queryset.ordered:
if reverse: if reverse:
queryset = queryset.order_by(*_reverse_ordering(self.ordering)) queryset = queryset.order_by(*_reverse_ordering(self.ordering))
else: else:

View File

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