summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-04-28 15:09:41 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-04-28 15:09:41 +0000
commite8b2a8649fe73b8076574efa43e4e31a45d40406 (patch)
tree597f573b691438fee48230383e7bb7e2f2e85f6b
parent9963ce79b9560b6109ef917944fb30e6336435c5 (diff)
newforms-admin: Fixed #1576 -- Fixed SQL generation when using descending
ordering from related models. Based on a patch from SmileyChris. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@5122 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/views/main.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 67b6dd7061..222452d13e 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -395,6 +395,7 @@ class ChangeList(object):
# If the order-by field is a field with a relationship, order by the
# value in the related table.
lookup_order_field = self.order_field
+ order_type = self.order_type == 'desc' and '-' or ''
try:
f = self.lookup_opts.get_field(self.order_field, many_to_many=False)
except models.FieldDoesNotExist:
@@ -405,10 +406,16 @@ class ChangeList(object):
pass
elif isinstance(f.rel, models.ManyToOneRel):
rel_ordering = f.rel.to._meta.ordering and f.rel.to._meta.ordering[0] or f.rel.to._meta.pk.column
+ if rel_ordering[0] == '-':
+ rel_ordering = rel_ordering[1:]
+ order_type = not order_type and '-' or ''
lookup_order_field = '%s.%s' % (f.rel.to._meta.db_table, rel_ordering)
+ # FIXME: Must use select_related() becuase the lookup field may
+ # be in a table not otherwise referenced yet.
+ qs = qs.select_related()
# Set ordering.
- qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)
+ qs = qs.order_by(order_type + lookup_order_field)
# Apply keyword searches.
def construct_search(field_name):