diff options
author | Jon Dufresne <jon.dufresne@gmail.com> | 2018-02-05 08:02:57 -0800 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2018-02-05 11:02:57 -0500 |
commit | 8b21878357364a461bae711c4d0011a8f338b160 (patch) | |
tree | 6990269953c7b8cffefc9b2e9414ddc717843b49 /tests/prefetch_related | |
parent | 16ee53d7bb01819859c78a88e3fc93eda985f71a (diff) | |
download | django-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.py | 3 | ||||
-rw-r--r-- | tests/prefetch_related/tests.py | 15 |
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 |