summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnssi Kääriäinen <akaariai@gmail.com>2014-05-05 15:22:01 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2014-05-05 15:28:07 +0300
commit3b7c66a3ac0fcaa5dd02f87888c787d2c735c1a7 (patch)
treee97c3d226a5b4b399dd8881b73c64fdc29ef4c30
parentfb7c347f7bd360b567c0b30697a6a200be2d6778 (diff)
Fixed #22466 -- ordering by reverse foreign key
Ordering by reverse foreign key was broken by custom lookups patch (commit 20bab2cf9d02a5c6477d8aac066a635986e0d3f3). Thanks to everybody who helped solving this issue. Special thanks to Trac alias takis for reporting this.
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/queries/tests.py12
2 files changed, 14 insertions, 0 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 6814af6439..cb94989a05 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1432,6 +1432,8 @@ class Query(object):
alias = self.join(
connection, reuse=reuse, nullable=nullable, join_field=join.join_field)
joins.append(alias)
+ if hasattr(final_field, 'field'):
+ final_field = final_field.field
return final_field, targets, opts, joins, path
def trim_joins(self, targets, joins, path):
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index ad6cbd910c..48d45f70f1 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -1397,6 +1397,18 @@ class Queries4Tests(BaseQuerysetTest):
qs = Author.objects.order_by().order_by('name')
self.assertTrue('ORDER BY' in qs.query.get_compiler(qs.db).as_sql()[0])
+ def test_order_by_reverse_fk(self):
+ # It is possible to order by reverse of foreign key, although that can lead
+ # to duplicate results.
+ c1 = SimpleCategory.objects.create(name="category1")
+ c2 = SimpleCategory.objects.create(name="category2")
+ CategoryItem.objects.create(category=c1)
+ CategoryItem.objects.create(category=c2)
+ CategoryItem.objects.create(category=c1)
+ self.assertQuerysetEqual(
+ SimpleCategory.objects.order_by('categoryitem', 'pk'),
+ [c1, c2, c1], lambda x: x)
+
def test_ticket10181(self):
# Avoid raising an EmptyResultSet if an inner query is probably
# empty (and hence, not executed).