From a7b5ad8b19a08d7d57302ece74f6e26d2887fd9f Mon Sep 17 00:00:00 2001 From: Paulo Date: Tue, 19 Sep 2017 12:51:19 -0500 Subject: Fixed #27846 -- Made Model.refresh_from_db() clear cached relations. --- tests/basic/models.py | 4 ++++ tests/basic/tests.py | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'tests/basic') diff --git a/tests/basic/models.py b/tests/basic/models.py index c08b147ac4..40de6ae7de 100644 --- a/tests/basic/models.py +++ b/tests/basic/models.py @@ -17,6 +17,10 @@ class Article(models.Model): return self.headline +class FeaturedArticle(models.Model): + article = models.OneToOneField(Article, models.CASCADE, related_name='featured') + + class ArticleSelectOnSave(Article): class Meta: proxy = True diff --git a/tests/basic/tests.py b/tests/basic/tests.py index d877562116..7a99ab0cf0 100644 --- a/tests/basic/tests.py +++ b/tests/basic/tests.py @@ -10,7 +10,7 @@ from django.test import ( ) from django.utils.translation import gettext_lazy -from .models import Article, ArticleSelectOnSave, SelfRef +from .models import Article, ArticleSelectOnSave, FeaturedArticle, SelfRef class ModelInstanceCreationTests(TestCase): @@ -711,3 +711,14 @@ class ModelRefreshTests(TestCase): a = Article.objects.create(pub_date=datetime.now()) with self.assertNumQueries(0): a.refresh_from_db(fields=[]) + + def test_refresh_clears_reverse_related(self): + """refresh_from_db() clear cached reverse relations.""" + article = Article.objects.create( + headline='Parrot programs in Python', + pub_date=datetime(2005, 7, 28), + ) + self.assertFalse(hasattr(article, 'featured')) + FeaturedArticle.objects.create(article_id=article.pk) + article.refresh_from_db() + self.assertTrue(hasattr(article, 'featured')) -- cgit v1.3