Skip to content

Commit 5f86924

Browse files
James LinJames Lin
authored andcommitted
refactored HybridPagination
1 parent 0905af9 commit 5f86924

File tree

1 file changed

+19
-22
lines changed

1 file changed

+19
-22
lines changed

rest_framework_queryset/pagination.py

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,31 @@
33
from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination
44

55

6-
class HybridPagination(PageNumberPagination, LimitOffsetPagination):
6+
class HybridPagination(PageNumberPagination):
77
"""
88
Basically allows both pagination method to work within a single pagination class.
99
By default it uses the PageNumberPagination
1010
When 'offset' is used in request.GET, it will switch to use LimitOffsetPagination
1111
"""
12-
proxy = PageNumberPagination
12+
page_size = 2
13+
default_limit = 1
14+
15+
def __init__(self, *args, **kwargs):
16+
self.proxy = None
17+
return super(HybridPagination, self).__init__(*args, **kwargs)
1318

1419
def paginate_queryset(self, queryset, request, view=None):
1520
if 'offset' in request.GET or 'limit' in request.GET:
16-
self.proxy = LimitOffsetPagination
17-
return self.proxy.paginate_queryset(self, queryset, request, view)
18-
19-
def get_paginated_response(self, *args, **kwargs):
20-
return self.proxy.get_paginated_response(self, *args, **kwargs)
21-
22-
def to_html(self):
23-
return self.proxy.to_html(self)
24-
25-
def get_results(self, *args, **kwargs):
26-
return self.proxy.get_results(self, *args, **kwargs)
27-
28-
def get_next_link(self, *args, **kwargs):
29-
return self.proxy.get_next_link(self, *args, **kwargs)
30-
31-
def get_previous_link(self, *args, **kwargs):
32-
return self.proxy.get_previous_link(self, *args, **kwargs)
33-
34-
def get_html_context(self, *args, **kwargs):
35-
return self.proxy.get_html_context(self, *args, **kwargs)
21+
self.proxy = LimitOffsetPagination()
22+
return self.proxy.paginate_queryset(queryset, request, view)
23+
return super(HybridPagination, self).paginate_queryset(queryset, request, view)
24+
25+
def __getattribute__(self, item):
26+
if item in ['paginate_queryset']:
27+
return object.__getattribute__(self, item)
28+
try:
29+
proxy = object.__getattribute__(self, "proxy")
30+
return object.__getattribute__(proxy, item)
31+
except AttributeError:
32+
return object.__getattribute__(self, item)
3633

0 commit comments

Comments
 (0)