1
1
from .pagination import PAGE_VAR , Pagination
2
2
3
+ TAB_VAR = "tab"
4
+
3
5
4
6
class ObjectList :
5
7
pagination_class = Pagination
8
+ base_ordering = ()
9
+ sorting_tabs = {}
6
10
7
11
def __init__ (self , request , model , queryset , list_per_page ):
8
12
self .model = model
13
+ self .opts = model ._meta
9
14
self .queryset = queryset
10
15
self .list_per_page = list_per_page
11
- self .params = dict (request .GET .lists ())
16
+ self .params = dict (request .GET .dict ())
17
+ self .current_tab = self .params .get (TAB_VAR , None )
18
+ if self .opts .ordering :
19
+ self .base_ordering = self .opts .ordering
12
20
if PAGE_VAR in self .params :
13
21
del self .params [PAGE_VAR ]
14
- self .result_objects = self .get_objects (request )
22
+ self .result_objects = self .get_objects (request , queryset )
15
23
16
24
def __iter__ (self ):
17
25
return iter (self .result_objects )
18
26
27
+ def tab_sort (self , queryset ):
28
+ result_queryset = queryset
29
+ if self .current_tab :
30
+ sort_value = self .sorting_tabs [self .current_tab ]
31
+ result_queryset = result_queryset .order_by (* sort_value , * self .base_ordering )
32
+ else :
33
+ for tab_name , tab_order in self .sorting_tabs .items ():
34
+ if tab_order == self .base_ordering :
35
+ self .current_tab = tab_name
36
+ break
37
+
38
+ return result_queryset
39
+
19
40
def paginate (self , request , queryset ):
20
41
pagination = self .pagination_class (
21
42
request ,
@@ -26,6 +47,7 @@ def paginate(self, request, queryset):
26
47
self .pagination = pagination
27
48
return pagination .get_objects ()
28
49
29
- def get_objects (self , request ):
30
- paginate_result = self .paginate (request , self .queryset )
50
+ def get_objects (self , request , queryset ):
51
+ tab_result = self .tab_sort (queryset )
52
+ paginate_result = self .paginate (request , tab_result )
31
53
return paginate_result
0 commit comments