Created
November 30, 2008 06:47
-
-
Save tmc/30397 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/contrib/admin/views/main.py b/contrib/admin/views/main.py | |
index 1051648..7c7385d 100644 | |
--- a/contrib/admin/views/main.py | |
+++ b/contrib/admin/views/main.py | |
@@ -62,7 +62,7 @@ class ChangeList(object): | |
if ERROR_FLAG in self.params: | |
del self.params[ERROR_FLAG] | |
- self.order_field, self.order_type = self.get_ordering() | |
+ self.order_field, self.order_type = self.get_order_field_and_type() | |
self.query = request.GET.get(SEARCH_VAR, '') | |
self.query_set = self.get_query_set() | |
self.get_results(request) | |
@@ -129,6 +129,14 @@ class ChangeList(object): | |
self.multi_page = multi_page | |
self.paginator = paginator | |
+ def get_order_field_and_type(self): | |
+ field = self.ordering[0] | |
+ type = 'asc' | |
+ if field[0] == '-': | |
+ type = 'desc' | |
+ field = field[1:] | |
+ return field, type | |
+ | |
def get_ordering(self): | |
lookup_opts, params = self.lookup_opts, self.params | |
# For ordering, first check the "ordering" parameter in the admin | |
@@ -136,11 +144,7 @@ class ChangeList(object): | |
# those exist, order descending by ID by default. Finally, look for | |
# manually-specified ordering from the query string. | |
ordering = self.model_admin.ordering or lookup_opts.ordering or ['-' + lookup_opts.pk.name] | |
- | |
- if ordering[0].startswith('-'): | |
- order_field, order_type = ordering[0][1:], 'desc' | |
- else: | |
- order_field, order_type = ordering[0], 'asc' | |
+ | |
if ORDER_VAR in params: | |
try: | |
field_name = self.list_display[int(params[ORDER_VAR])] | |
@@ -163,9 +167,11 @@ class ChangeList(object): | |
order_field = f.name | |
except (IndexError, ValueError): | |
pass # Invalid ordering specified. Just use the default. | |
- if ORDER_TYPE_VAR in params and params[ORDER_TYPE_VAR] in ('asc', 'desc'): | |
- order_type = params[ORDER_TYPE_VAR] | |
- return order_field, order_type | |
+ if ORDER_TYPE_VAR in params and params[ORDER_TYPE_VAR] == 'desc': | |
+ order_field = '-%s' % order_field | |
+ ordering = [order_field] + ordering | |
+ return ordering | |
+ ordering = property(get_ordering) | |
def get_query_set(self): | |
qs = self.root_query_set | |
@@ -211,8 +217,7 @@ class ChangeList(object): | |
break | |
# Set ordering. | |
- if self.order_field: | |
- qs = qs.order_by('%s%s' % ((self.order_type == 'desc' and '-' or ''), self.order_field)) | |
+ qs = qs.order_by(*self.ordering) | |
# Apply keyword searches. | |
def construct_search(field_name): |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment