@@ -196,7 +196,7 @@ def prepare_headers(table):
196196 if column .sortable :
197197 params = params_of_request (request )
198198 param_path = path_join (table .iommi_path , 'order' )
199- order = request . GET . get ( param_path ) or table .default_sort_order
199+ order = table .current_sort_order
200200 start_sort_desc = column .sort_default_desc
201201 params [param_path ] = name if not start_sort_desc else '-' + name
202202 column .is_sorting = False
@@ -1729,6 +1729,24 @@ def __html__(self):
17291729 return mark_safe ('\n ' .join ([cells .__html__ () for cells in self .table .cells_for_rows ()]))
17301730
17311731
1732+ def get_queryset_ordering (queryset ):
1733+ # Check if queryset has default_ordering flag set to False
1734+ # (This happens when .order_by() is called with no arguments)
1735+ if not queryset .query .default_ordering :
1736+ return ()
1737+
1738+ # Get explicit ordering if it exists
1739+ if queryset .query .order_by :
1740+ return queryset .query .order_by
1741+
1742+ # Fall back to model's Meta.ordering
1743+ model = queryset .model
1744+ if hasattr (model , '_meta' ) and model ._meta .ordering :
1745+ return tuple (model ._meta .ordering )
1746+
1747+ return ()
1748+
1749+
17321750@declarative (Column , '_columns_dict' , add_init_kwargs = False )
17331751class Table (Part , Tag ):
17341752 # language=rst
@@ -2332,6 +2350,7 @@ def _prepare_sorting(self):
23322350 """
23332351 # TODO: Sorting less values is faster then sorting more values, so we should
23342352 # filter first and then sort.
2353+ self .current_sort_order = None
23352354 self .sorted_rows = self .initial_rows
23362355 self .rows = self .sorted_rows
23372356 request = self .get_request ()
@@ -2340,6 +2359,7 @@ def _prepare_sorting(self):
23402359
23412360 # `or self.default_sort_order` is on purpose here, because an empty string should go to default_sort_order too
23422361 order = request .GET .get (path_join (self .iommi_path , 'order' )) or self .default_sort_order
2362+
23432363 if order is not None :
23442364 descending = order .startswith ('-' )
23452365 order_field = order [1 :] if descending else order
@@ -2356,6 +2376,14 @@ def _prepare_sorting(self):
23562376 )
23572377 self .rows = self .sorted_rows
23582378
2379+ if order is None and isinstance (self .sorted_rows , QuerySet ):
2380+ # order = self.sorted_rows
2381+ ordering = get_queryset_ordering (self .sorted_rows )
2382+ if len (ordering ) == 1 :
2383+ order = ordering [0 ]
2384+
2385+ self .current_sort_order = order
2386+
23592387 @staticmethod
23602388 @refinable
23612389 def sorter (
0 commit comments