diff options
| author | trontelj <tronteljklemen@gmail.com> | 2023-10-28 00:24:09 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-11-24 13:42:40 +0100 |
| commit | b0ec87b8578147be4357c90eabcd2b916c780810 (patch) | |
| tree | 15a7c13f473ab5f2d0056aa8f5dec6ba0667ce58 /tests/basic | |
| parent | 1c6e8ec4ed6d9c374161eda965160e4782c7d71e (diff) | |
Fixed #34925 -- Prevented Model.refresh_from_db() from mutating list of fields.
Diffstat (limited to 'tests/basic')
| -rw-r--r-- | tests/basic/models.py | 3 | ||||
| -rw-r--r-- | tests/basic/tests.py | 16 |
2 files changed, 15 insertions, 4 deletions
diff --git a/tests/basic/models.py b/tests/basic/models.py index b71b60a213..6802f825ff 100644 --- a/tests/basic/models.py +++ b/tests/basic/models.py @@ -38,6 +38,9 @@ class SelfRef(models.Model): related_name="+", ) article = models.ForeignKey(Article, models.SET_NULL, null=True, blank=True) + article_cited = models.ForeignKey( + Article, models.SET_NULL, null=True, blank=True, related_name="cited" + ) def __str__(self): # This method intentionally doesn't work for all cases - part diff --git a/tests/basic/tests.py b/tests/basic/tests.py index 3c2d1dead9..c6ad1faefd 100644 --- a/tests/basic/tests.py +++ b/tests/basic/tests.py @@ -926,24 +926,32 @@ class ModelRefreshTests(TestCase): def test_prefetched_cache_cleared(self): a = Article.objects.create(pub_date=datetime(2005, 7, 28)) - s = SelfRef.objects.create(article=a) + s = SelfRef.objects.create(article=a, article_cited=a) # refresh_from_db() without fields=[...] - a1_prefetched = Article.objects.prefetch_related("selfref_set").first() + a1_prefetched = Article.objects.prefetch_related("selfref_set", "cited").first() self.assertCountEqual(a1_prefetched.selfref_set.all(), [s]) + self.assertCountEqual(a1_prefetched.cited.all(), [s]) s.article = None + s.article_cited = None s.save() # Relation is cleared and prefetch cache is stale. self.assertCountEqual(a1_prefetched.selfref_set.all(), [s]) + self.assertCountEqual(a1_prefetched.cited.all(), [s]) a1_prefetched.refresh_from_db() # Cache was cleared and new results are available. self.assertCountEqual(a1_prefetched.selfref_set.all(), []) + self.assertCountEqual(a1_prefetched.cited.all(), []) # refresh_from_db() with fields=[...] - a2_prefetched = Article.objects.prefetch_related("selfref_set").first() + a2_prefetched = Article.objects.prefetch_related("selfref_set", "cited").first() self.assertCountEqual(a2_prefetched.selfref_set.all(), []) + self.assertCountEqual(a2_prefetched.cited.all(), []) s.article = a + s.article_cited = a s.save() # Relation is added and prefetch cache is stale. self.assertCountEqual(a2_prefetched.selfref_set.all(), []) - a2_prefetched.refresh_from_db(fields=["selfref_set"]) + self.assertCountEqual(a2_prefetched.cited.all(), []) + a2_prefetched.refresh_from_db(fields=["selfref_set", "cited"]) # Cache was cleared and new results are available. self.assertCountEqual(a2_prefetched.selfref_set.all(), [s]) + self.assertCountEqual(a2_prefetched.cited.all(), [s]) |
