Fixed #3002 -- Fixed a problem with ordering by related models in the admin

interface. Patch from Ramiro Morales.


git-svn-id: http://code.djangoproject.com/svn/django/trunk@7491 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2008-04-28 02:40:57 +00:00
parent 356dfd5308
commit a1e4b15f15
1 changed files with 2 additions and 17 deletions

View File

@ -716,24 +716,9 @@ class ChangeList(object):
qs = qs.select_related() qs = qs.select_related()
break break
# Calculate lookup_order_field.
# 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
try:
f = self.lookup_opts.get_field(self.order_field, many_to_many=False)
except models.FieldDoesNotExist:
pass
else:
if isinstance(f.rel, models.OneToOneRel):
# For OneToOneFields, don't try to order by the related object's ordering criteria.
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
lookup_order_field = '%s.%s' % (f.rel.to._meta.db_table, rel_ordering)
# Set ordering. # Set ordering.
qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field) if self.order_field:
qs = qs.order_by('%s%s' % ((self.order_type == 'desc' and '-' or ''), self.order_field))
# Apply keyword searches. # Apply keyword searches.
def construct_search(field_name): def construct_search(field_name):