mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-12-03 16:24:01 +03:00
Enforce ordering only when queryset is not ordered
This commit is contained in:
parent
d692b87a2b
commit
45e66ec24e
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user