Skip to content

Commit fea02d7

Browse files
committed
Remove ordering filter class handling
These filters are already applied by GenericAPIView.filter_queryset()
1 parent 018de3b commit fea02d7

File tree

2 files changed

+9
-63
lines changed

2 files changed

+9
-63
lines changed

rest_framework/pagination.py

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -624,7 +624,7 @@ def paginate_queryset(self, queryset, request, view=None):
624624

625625
# Cursor pagination always enforces an ordering.
626626
if not queryset.ordered:
627-
self.ordering = self.get_ordering(request, queryset, view)
627+
self.ordering = self.get_ordering()
628628

629629
if reverse:
630630
queryset = queryset.order_by(*_reverse_ordering(self.ordering))
@@ -803,47 +803,29 @@ def get_previous_link(self):
803803
cursor = Cursor(offset=offset, reverse=True, position=position)
804804
return self.encode_cursor(cursor)
805805

806-
def get_ordering(self, request, queryset, view):
806+
def get_ordering(self):
807807
"""
808808
Return a tuple of strings, that may be used in an `order_by` method.
809809
"""
810-
# The default case is to check for an `ordering` attribute
811-
# on this pagination instance.
812-
ordering = self.ordering
813-
814-
ordering_filters = [
815-
filter_cls for filter_cls in getattr(view, 'filter_backends', [])
816-
if hasattr(filter_cls, 'get_ordering')
817-
]
818-
819-
if ordering_filters:
820-
# If a filter exists on the view that implements `get_ordering`
821-
# then we defer to that filter to determine the ordering.
822-
filter_cls = ordering_filters[0]
823-
filter_instance = filter_cls()
824-
ordering_from_filter = filter_instance.get_ordering(request, queryset, view)
825-
if ordering_from_filter:
826-
ordering = ordering_from_filter
827-
828-
assert ordering is not None, (
810+
assert self.ordering is not None, (
829811
'Using cursor pagination, but no ordering attribute was declared '
830812
'on the pagination class.'
831813
)
832-
assert '__' not in ordering, (
814+
assert '__' not in self.ordering, (
833815
'Cursor pagination does not support double underscore lookups '
834816
'for orderings. Orderings should be an unchanging, unique or '
835817
'nearly-unique field on the model, such as "-created" or "pk".'
836818
)
837819

838-
assert isinstance(ordering, (str, list, tuple)), (
820+
assert isinstance(self.ordering, (str, list, tuple)), (
839821
'Invalid ordering. Expected string or tuple, but got {type}'.format(
840-
type=type(ordering).__name__
822+
type=type(self.ordering).__name__
841823
)
842824
)
843825

844-
if isinstance(ordering, str):
845-
return (ordering,)
846-
return tuple(ordering)
826+
if isinstance(self.ordering, str):
827+
return (self.ordering,)
828+
return tuple(self.ordering)
847829

848830
def decode_cursor(self, request):
849831
"""

tests/test_pagination.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -616,42 +616,6 @@ def test_invalid_cursor(self):
616616
with pytest.raises(exceptions.NotFound):
617617
self.pagination.paginate_queryset(self.queryset, request)
618618

619-
def test_use_with_ordering_filter(self):
620-
class MockView:
621-
filter_backends = (filters.OrderingFilter,)
622-
ordering_fields = ['username', 'created']
623-
ordering = 'created'
624-
625-
request = Request(factory.get('/', {'ordering': 'username'}))
626-
ordering = self.pagination.get_ordering(request, [], MockView())
627-
assert ordering == ('username',)
628-
629-
request = Request(factory.get('/', {'ordering': '-username'}))
630-
ordering = self.pagination.get_ordering(request, [], MockView())
631-
assert ordering == ('-username',)
632-
633-
request = Request(factory.get('/', {'ordering': 'invalid'}))
634-
ordering = self.pagination.get_ordering(request, [], MockView())
635-
assert ordering == ('created',)
636-
637-
def test_use_with_ordering_filter_without_ordering_default_value(self):
638-
class MockView:
639-
filter_backends = (filters.OrderingFilter,)
640-
ordering_fields = ['username', 'created']
641-
642-
request = Request(factory.get('/'))
643-
ordering = self.pagination.get_ordering(request, [], MockView())
644-
# it gets the value of `ordering` provided by CursorPagination
645-
assert ordering == ('created',)
646-
647-
request = Request(factory.get('/', {'ordering': 'username'}))
648-
ordering = self.pagination.get_ordering(request, [], MockView())
649-
assert ordering == ('username',)
650-
651-
request = Request(factory.get('/', {'ordering': 'invalid'}))
652-
ordering = self.pagination.get_ordering(request, [], MockView())
653-
assert ordering == ('created',)
654-
655619
def test_cursor_pagination(self):
656620
(previous, current, next, previous_url, next_url) = self.get_pages('/')
657621

0 commit comments

Comments
 (0)