Changeset 9251
- Timestamp:
- 10/24/08 01:09:47 (3 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/db/models/sql/query.py
r9206 r9251 622 622 else: 623 623 asc, desc = ORDER_DIR['DESC'] 624 625 # It's possible, due to model inheritance, that normal usage might try 626 # to include the same field more than once in the ordering. We track 627 # the table/column pairs we use and discard any after the first use. 628 processed_pairs = set() 629 624 630 for field in ordering: 625 631 if field == '?': … … 639 645 col, order = get_order_dir(field, asc) 640 646 table, col = col.split('.', 1) 641 elt = '%s.%s' % (qn(table), col) 642 if not distinct or elt in select_aliases: 643 result.append('%s %s' % (elt, order)) 647 if (table, col) not in processed_pairs: 648 elt = '%s.%s' % (qn(table), col) 649 processed_pairs.add((table, col)) 650 if not distinct or elt in select_aliases: 651 result.append('%s %s' % (elt, order)) 644 652 elif get_order_dir(field)[0] not in self.extra_select: 645 653 # 'col' is of the form 'field' or 'field1__field2' or … … 647 655 for table, col, order in self.find_ordering_name(field, 648 656 self.model._meta, default_order=asc): 649 elt = '%s.%s' % (qn(table), qn2(col)) 650 if distinct and elt not in select_aliases: 651 ordering_aliases.append(elt) 652 result.append('%s %s' % (elt, order)) 657 if (table, col) not in processed_pairs: 658 elt = '%s.%s' % (qn(table), qn2(col)) 659 processed_pairs.add((table, col)) 660 if distinct and elt not in select_aliases: 661 ordering_aliases.append(elt) 662 result.append('%s %s' % (elt, order)) 653 663 else: 654 664 col, order = get_order_dir(field, asc) django/trunk/tests/regressiontests/model_inheritance_regress/models.py
r8932 r9251 258 258 >>> _ = QualityControl.objects.create(headline="Problems in Django", pub_date=datetime.datetime.now(), quality=10, assignee="adrian") 259 259 260 # Ordering should not include any database column more than once (this is most 261 # likely to ocurr naturally with model inheritance, so we check it here). 262 # Regression test for #9390. This necessarily pokes at the SQL string for the 263 # query, since the duplicate problems are only apparent at that late stage. 264 >>> sql = ArticleWithAuthor.objects.order_by('pub_date', 'pk').query.as_sql()[0] 265 >>> fragment = sql[sql.find('ORDER BY'):] 266 >>> pos = fragment.find('pub_date') 267 >>> fragment.find('pub_date', pos + 1) == -1 268 True 269 260 270 """}
