Django

Code

Changeset 5092

Show
Ignore:
Timestamp:
04/26/07 08:48:31 (2 years ago)
Author:
mtredinnick
Message:

Fixed #1576 -- Fixed incorrect SQL generated when using descending ordering
from related models. Patch from SmileyChris?.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/views/main.py

    r5091 r5092  
    708708        # value in the related table. 
    709709        lookup_order_field = self.order_field 
     710        order_type = self.order_type == 'desc' and '-' or '' 
    710711        try: 
    711712            f = self.lookup_opts.get_field(self.order_field, many_to_many=False) 
     
    718719            elif isinstance(f.rel, models.ManyToOneRel): 
    719720                rel_ordering = f.rel.to._meta.ordering and f.rel.to._meta.ordering[0] or f.rel.to._meta.pk.column 
     721                if rel_ordering[0] == '-': 
     722                    rel_ordering = rel_ordering[1:] 
     723                    order_type = not order_type and '-' or '' 
    720724                lookup_order_field = '%s.%s' % (f.rel.to._meta.db_table, rel_ordering) 
     725                # Must select related because the lookup field may be in a 
     726                # table not otherwise referenced yet. 
     727                # FIXME: Try to remove the need for this in the QuerySet 
     728                # refactor. 
     729                qs = qs.select_related() 
    721730 
    722731        # Set ordering. 
    723         qs = qs.order_by((self.order_type == 'desc' and '-' or '') + lookup_order_field
     732        qs = qs.order_by('%s%s' % (order_type, lookup_order_field)
    724733 
    725734        # Apply keyword searches.