summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-11-13 11:42:12 +0700
committerAnssi Kääriäinen <akaariai@gmail.com>2013-11-13 07:41:30 +0200
commitb107421acfc4046ffaa799aceef2c3b4877207f2 (patch)
tree7d626b0e35a4a2036dc2528fc66a71fd0b733e73 /tests
parentb6acc4f7498f195096e20af3e4fe0dd68d2dbac8 (diff)
[1.6.x] Fixed #21410 -- prefetch_related() for ForeignKeys with related_name='+'
Regression introduced by commit 9777442. Thanks to trac username troygrosfield for the report and test case. Backpatch of cb83448891f2920c926f61826d8eae4051a3d8f2 from master. Conflicts: tests/prefetch_related/models.py
Diffstat (limited to 'tests')
-rw-r--r--tests/prefetch_related/models.py15
-rw-r--r--tests/prefetch_related/tests.py28
2 files changed, 42 insertions, 1 deletions
diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py
index 82bf85e401..f94659113a 100644
--- a/tests/prefetch_related/models.py
+++ b/tests/prefetch_related/models.py
@@ -215,3 +215,18 @@ class WordEntry(models.Model):
def __str__(self):
return "%s (%s)" % (self.name, self.id)
+
+
+## Ticket #21410: Regression when related_name="+"
+
+@python_2_unicode_compatible
+class Author2(models.Model):
+ name = models.CharField(max_length=50, unique=True)
+ first_book = models.ForeignKey('Book', related_name='first_time_authors+')
+ favorite_books = models.ManyToManyField('Book', related_name='+')
+
+ def __str__(self):
+ return self.name
+
+ class Meta:
+ ordering = ['id']
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index 2e3fee6be6..384457aba4 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -9,7 +9,7 @@ from django.utils import six
from .models import (Author, Book, Reader, Qualification, Teacher, Department,
TaggedItem, Bookmark, AuthorAddress, FavoriteAuthors, AuthorWithAge,
BookWithYear, BookReview, Person, House, Room, Employee, Comment,
- LessonEntry, WordEntry)
+ LessonEntry, WordEntry, Author2)
class PrefetchRelatedTests(TestCase):
@@ -651,3 +651,29 @@ class Ticket19607Tests(TestCase):
def test_bug(self):
list(WordEntry.objects.prefetch_related('lesson_entry', 'lesson_entry__wordentry_set'))
+
+
+class Ticket21410Tests(TestCase):
+
+ def setUp(self):
+ self.book1 = Book.objects.create(title="Poems")
+ self.book2 = Book.objects.create(title="Jane Eyre")
+ self.book3 = Book.objects.create(title="Wuthering Heights")
+ self.book4 = Book.objects.create(title="Sense and Sensibility")
+
+ self.author1 = Author2.objects.create(name="Charlotte",
+ first_book=self.book1)
+ self.author2 = Author2.objects.create(name="Anne",
+ first_book=self.book1)
+ self.author3 = Author2.objects.create(name="Emily",
+ first_book=self.book1)
+ self.author4 = Author2.objects.create(name="Jane",
+ first_book=self.book4)
+
+ self.author1.favorite_books.add(self.book1, self.book2, self.book3)
+ self.author2.favorite_books.add(self.book1)
+ self.author3.favorite_books.add(self.book2)
+ self.author4.favorite_books.add(self.book3)
+
+ def test_bug(self):
+ list(Author2.objects.prefetch_related('first_book', 'favorite_books'))