diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2014-05-05 15:22:01 +0300 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2014-05-05 15:28:07 +0300 |
| commit | 3b7c66a3ac0fcaa5dd02f87888c787d2c735c1a7 (patch) | |
| tree | e97c3d226a5b4b399dd8881b73c64fdc29ef4c30 | |
| parent | fb7c347f7bd360b567c0b30697a6a200be2d6778 (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.py | 2 | ||||
| -rw-r--r-- | tests/queries/tests.py | 12 |
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). |
