summaryrefslogtreecommitdiff
path: root/tests/prefetch_related
diff options
context:
space:
mode:
authorJon Dufresne <jon.dufresne@gmail.com>2018-02-05 08:02:57 -0800
committerTim Graham <timograham@gmail.com>2018-02-05 11:02:57 -0500
commit8b21878357364a461bae711c4d0011a8f338b160 (patch)
tree6990269953c7b8cffefc9b2e9414ddc717843b49 /tests/prefetch_related
parent16ee53d7bb01819859c78a88e3fc93eda985f71a (diff)
downloaddjango-8b21878357364a461bae711c4d0011a8f338b160.tar.gz
Refs #28723 -- Fixed stale prefetch_related cache after add/remove.
Regression in 514b2c989a948e3c59bda0da0c9427acf643cf5b.
Diffstat (limited to 'tests/prefetch_related')
-rw-r--r--tests/prefetch_related/models.py3
-rw-r--r--tests/prefetch_related/tests.py15
2 files changed, 17 insertions, 1 deletions
diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py
index 68fdc2686d..cb64b52a15 100644
--- a/tests/prefetch_related/models.py
+++ b/tests/prefetch_related/models.py
@@ -86,7 +86,8 @@ class Reader(models.Model):
class BookReview(models.Model):
- book = models.ForeignKey(BookWithYear, models.CASCADE)
+ # Intentionally does not have a related name.
+ book = models.ForeignKey(BookWithYear, models.CASCADE, null=True)
notes = models.TextField(null=True, blank=True)
diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py
index adadfa33b2..e92d7f349f 100644
--- a/tests/prefetch_related/tests.py
+++ b/tests/prefetch_related/tests.py
@@ -1415,6 +1415,21 @@ class DirectPrefechedObjectCacheReuseTests(TestCase):
with self.assertNumQueries(0):
prefetch_related_objects([bookwithyear1], 'bookreview_set')
+ def test_add_clears_prefetched_objects(self):
+ bookwithyear = BookWithYear.objects.get(pk=self.bookwithyear1.pk)
+ prefetch_related_objects([bookwithyear], 'bookreview_set')
+ self.assertCountEqual(bookwithyear.bookreview_set.all(), [self.bookreview1])
+ new_review = BookReview.objects.create()
+ bookwithyear.bookreview_set.add(new_review)
+ self.assertCountEqual(bookwithyear.bookreview_set.all(), [self.bookreview1, new_review])
+
+ def test_remove_clears_prefetched_objects(self):
+ bookwithyear = BookWithYear.objects.get(pk=self.bookwithyear1.pk)
+ prefetch_related_objects([bookwithyear], 'bookreview_set')
+ self.assertCountEqual(bookwithyear.bookreview_set.all(), [self.bookreview1])
+ bookwithyear.bookreview_set.remove(self.bookreview1)
+ self.assertCountEqual(bookwithyear.bookreview_set.all(), [])
+
class ReadPrefetchedObjectsCacheTests(TestCase):
@classmethod