diff options
author | Simon Charette <charette.s@gmail.com> | 2015-04-19 02:06:17 -0400 |
---|---|---|
committer | Simon Charette <charette.s@gmail.com> | 2015-04-20 15:49:58 -0400 |
commit | b44ed404c78e93e6afea0b011eead327e65fbd2f (patch) | |
tree | 74af8ab0c6957819fde21706a0ead693e53cfcd4 /tests/ordering | |
parent | ffe83d16bd0abfa58e4448cf9d48b52cc43544e9 (diff) | |
download | django-b44ed404c78e93e6afea0b011eead327e65fbd2f.tar.gz |
Fixed #24654 -- Based ordering circular references detection on columns.
Thanks to Elmar Bucher for the report and Tim for the review.
Diffstat (limited to 'tests/ordering')
-rw-r--r-- | tests/ordering/models.py | 14 | ||||
-rw-r--r-- | tests/ordering/tests.py | 19 |
2 files changed, 32 insertions, 1 deletions
diff --git a/tests/ordering/models.py b/tests/ordering/models.py index 57a75027f6..c588a4e418 100644 --- a/tests/ordering/models.py +++ b/tests/ordering/models.py @@ -25,6 +25,7 @@ class Author(models.Model): @python_2_unicode_compatible class Article(models.Model): author = models.ForeignKey(Author, null=True) + second_author = models.ForeignKey(Author, null=True) headline = models.CharField(max_length=100) pub_date = models.DateTimeField() @@ -33,3 +34,16 @@ class Article(models.Model): def __str__(self): return self.headline + + +class OrderedByAuthorArticle(Article): + class Meta: + proxy = True + ordering = ('author', 'second_author') + + +class Reference(models.Model): + article = models.ForeignKey(OrderedByAuthorArticle) + + class Meta: + ordering = ('article',) diff --git a/tests/ordering/tests.py b/tests/ordering/tests.py index 19d289a2d1..027d5f1eb5 100644 --- a/tests/ordering/tests.py +++ b/tests/ordering/tests.py @@ -6,7 +6,7 @@ from operator import attrgetter from django.db.models import F from django.test import TestCase -from .models import Article, Author +from .models import Article, Author, Reference class OrderingTests(TestCase): @@ -307,3 +307,20 @@ class OrderingTests(TestCase): ], attrgetter("headline") ) + + def test_related_ordering_duplicate_table_reference(self): + """ + An ordering referencing a model with an ordering referencing a model + multiple time no circular reference should be detected (#24654). + """ + first_author = Author.objects.create() + second_author = Author.objects.create() + self.a1.author = first_author + self.a1.second_author = second_author + self.a1.save() + self.a2.author = second_author + self.a2.second_author = first_author + self.a2.save() + r1 = Reference.objects.create(article_id=self.a1.pk) + r2 = Reference.objects.create(article_id=self.a2.pk) + self.assertQuerysetEqual(Reference.objects.all(), [r2, r1], lambda x: x) |