mirror of
https://github.com/django/django.git
synced 2025-07-04 09:49:12 +00:00
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
This commit is contained in:
parent
9963ce79b9
commit
e8b2a8649f
@ -395,6 +395,7 @@ class ChangeList(object):
|
|||||||
# If the order-by field is a field with a relationship, order by the
|
# If the order-by field is a field with a relationship, order by the
|
||||||
# value in the related table.
|
# value in the related table.
|
||||||
lookup_order_field = self.order_field
|
lookup_order_field = self.order_field
|
||||||
|
order_type = self.order_type == 'desc' and '-' or ''
|
||||||
try:
|
try:
|
||||||
f = self.lookup_opts.get_field(self.order_field, many_to_many=False)
|
f = self.lookup_opts.get_field(self.order_field, many_to_many=False)
|
||||||
except models.FieldDoesNotExist:
|
except models.FieldDoesNotExist:
|
||||||
@ -405,10 +406,16 @@ class ChangeList(object):
|
|||||||
pass
|
pass
|
||||||
elif isinstance(f.rel, models.ManyToOneRel):
|
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
|
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)
|
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.
|
# 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.
|
# Apply keyword searches.
|
||||||
def construct_search(field_name):
|
def construct_search(field_name):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user