summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/db/models/sql/query.py2
-rw-r--r--tests/regressiontests/queries/models.py13
2 files changed, 13 insertions, 2 deletions
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index d804075926..4cc1500c94 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -535,7 +535,7 @@ class Query(object):
# Firstly, avoid infinite loops.
if not already_seen:
already_seen = set()
- join_tuple = tuple(joins)
+ join_tuple = tuple([self.alias_map[j][TABLE_NAME] for j in joins])
if join_tuple in already_seen:
raise FieldError('Infinite loop caused by ordering.')
already_seen.add(join_tuple)
diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py
index f80d1eb827..487bdb15f2 100644
--- a/tests/regressiontests/queries/models.py
+++ b/tests/regressiontests/queries/models.py
@@ -111,6 +111,12 @@ class LoopY(models.Model):
class Meta:
ordering = ['x']
+class LoopZ(models.Model):
+ z = models.ForeignKey('self')
+
+ class Meta:
+ ordering = ['z']
+
__test__ = {'API_TESTS':"""
>>> t1 = Tag(name='t1')
>>> t1.save()
@@ -426,9 +432,14 @@ Traceback (most recent call last):
...
FieldError: Infinite loop caused by ordering.
+>>> LoopZ.objects.all()
+Traceback (most recent call last):
+...
+FieldError: Infinite loop caused by ordering.
+
# ... but you can still order in a non-recursive fashion amongst linked fields
# (the previous test failed because the default ordering was recursive).
->>> LoopX.objects.all().order_by('y__x__id')
+>>> LoopX.objects.all().order_by('y__x__y__x__id')
[]
# If the remote model does not have a default ordering, we order by its 'id'