Rafał Pitoń 11 лет назад
Родитель
Сommit
f24f125335
1 измененных файлов с 23 добавлено и 17 удалено
  1. 23 17
      misago/admin/views/generic/list.py

+ 23 - 17
misago/admin/views/generic/list.py

@@ -99,23 +99,18 @@ class ListView(AdminView):
             return None
 
     def get_ordering_methods(self, request):
-        methods = {
+        return {
             'GET': self.get_ordering_from_GET(request),
             'session': self.get_ordering_from_session(request),
             'default': self.clean_ordering(self.ordering[0][0]),
         }
 
-        if methods['GET'] and methods['GET'] != methods['session']:
-            request.session[self.ordering_session_key] = methods['GET']
-
-        return methods
-
-    def get_ordering_method(self, methods):
+    def get_ordering_method_to_use(self, methods):
         for method in ('GET', 'session', 'default'):
             if methods.get(method):
                 return methods.get(method)
 
-    def order_items(self, method, context):
+    def set_ordering_in_context(self, context, method):
         for order_by, name in self.ordering:
             order_as_dict = {
                 'type': 'desc' if order_by[0] == '-' else 'asc',
@@ -133,9 +128,9 @@ class ListView(AdminView):
                 context['order_by'].append(order_as_dict)
 
     """
-    Dispatch response
+    Querystrings builder
     """
-    def make_querystrings(self, request, context):
+    def make_querystrings(self, context):
         values = {}
         filter_values = {}
         order_values = {}
@@ -163,11 +158,14 @@ class ListView(AdminView):
         if filter_values:
             context['querystring_filter'] = '?%s' % urlencode(filter_values)
 
+    """
+    Dispatch response
+    """
     def dispatch(self, request, *args, **kwargs):
         active_filters = request.session.get(self.filters_token, None)
         extra_actions_list = self.extra_actions or []
 
-        set_querystring = False
+        refresh_querystring = False
 
         context = {
             'items': self.get_queryset(),
@@ -186,11 +184,19 @@ class ListView(AdminView):
 
         if self.ordering:
             ordering_methods = self.get_ordering_methods(request)
-            current_method = self.get_ordering_method(ordering_methods)
-            self.order_items(current_method, context)
+            used_method = self.get_ordering_method_to_use(ordering_methods)
+            self.set_ordering_in_context(context, used_method)
+
+            if (ordering_methods['GET'] and
+                    ordering_methods['GET'] != ordering_methods['session']):
+                # Store get method in session for future requests
+                session_key = self.ordering_session_key
+                request.session[session_key] = ordering_methods['GET']
 
-            if context['order_by'] and not ordering_methods.get('GET'):
-                set_querystring = True
+            if context['order_by'] and not ordering_methods['GET']:
+                # Make view redirect to itself with querystring,
+                # So address ball contains copy-friendly link
+                refresh_querystring = True
 
         self.search_form(request, context)
         if active_filters:
@@ -199,8 +205,8 @@ class ListView(AdminView):
         if self.items_per_page:
             self.paginate_items(context, kwargs.get('page', 0))
 
-        self.make_querystrings(request, context)
-        if set_querystring:
+        self.make_querystrings(context)
+        if refresh_querystring:
             return redirect('%s%s' % (request.path, context['querystring']))
 
         return self.render(request, context)