Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #1576 -- Fixed incorrect SQL generated when using descending or…

…dering

from related models. Patch from SmileyChris.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@5092 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit 6c18ba8c910451a1c579a6a62a46d63be2b4e8af 1 parent 439cb40
Malcolm Tredinnick malcolmt authored
Showing with 10 additions and 1 deletion.
  1. +10 −1 django/contrib/admin/views/main.py
11 django/contrib/admin/views/main.py
View
@@ -707,6 +707,7 @@ def get_query_set(self):
# 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:
@@ -717,10 +718,18 @@ def get_query_set(self):
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)
+ # Must select related because the lookup field may be in a
+ # table not otherwise referenced yet.
+ # FIXME: Try to remove the need for this in the QuerySet
+ # refactor.
+ qs = qs.select_related()
# Set ordering.
- qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field)
+ qs = qs.order_by('%s%s' % (order_type, lookup_order_field))
# Apply keyword searches.
def construct_search(field_name):
Please sign in to comment.
Something went wrong with that request. Please try again.