diff options
Diffstat (limited to 'tests/contenttypes_tests')
| -rw-r--r-- | tests/contenttypes_tests/test_fields.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/contenttypes_tests/test_fields.py b/tests/contenttypes_tests/test_fields.py index 5510f34cd0..15f1dafd63 100644 --- a/tests/contenttypes_tests/test_fields.py +++ b/tests/contenttypes_tests/test_fields.py @@ -45,6 +45,18 @@ class GenericForeignKeyTests(TestCase): new_entity = answer.question self.assertIsNot(old_entity, new_entity) + def test_clear_cached_generic_relation_explicit_fields(self): + question = Question.objects.create(text="question") + answer = Answer.objects.create(text="answer", question=question) + old_question_obj = answer.question + # The reverse relation is not refreshed if not passed explicitly in + # `fields`. + answer.refresh_from_db(fields=["text"]) + self.assertIs(answer.question, old_question_obj) + answer.refresh_from_db(fields=["question"]) + self.assertIsNot(answer.question, old_question_obj) + self.assertEqual(answer.question, old_question_obj) + class GenericRelationTests(TestCase): def test_value_to_string(self): @@ -55,6 +67,29 @@ class GenericRelationTests(TestCase): self.assertCountEqual(result, [answer1.pk, answer2.pk]) +class DeferredGenericRelationTests(TestCase): + @classmethod + def setUpTestData(cls): + cls.question = Question.objects.create(text="question") + cls.answer = Answer.objects.create(text="answer", question=cls.question) + + def test_defer_not_clear_cached_private_relations(self): + obj = Answer.objects.defer("text").get(pk=self.answer.pk) + with self.assertNumQueries(1): + obj.question + obj.text # Accessing a deferred field. + with self.assertNumQueries(0): + obj.question + + def test_only_not_clear_cached_private_relations(self): + obj = Answer.objects.only("content_type", "object_id").get(pk=self.answer.pk) + with self.assertNumQueries(1): + obj.question + obj.text # Accessing a deferred field. + with self.assertNumQueries(0): + obj.question + + class GetPrefetchQuerySetDeprecation(TestCase): def test_generic_relation_warning(self): Question.objects.create(text="test") |
