From 5009e45dfe366ebf520eecb49d72d5a11cee1623 Mon Sep 17 00:00:00 2001 From: Luke Plant Date: Fri, 30 Sep 2011 10:41:25 +0000 Subject: Fixed #14270 - related manager classes should be cached Thanks to Alex Gaynor for the report and initial patch, and mrmachine for more work on it. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16916 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- tests/modeltests/many_to_one/tests.py | 10 ++++++++++ tests/regressiontests/m2m_regress/tests.py | 14 ++++++++++++++ 2 files changed, 24 insertions(+) (limited to 'tests') diff --git a/tests/modeltests/many_to_one/tests.py b/tests/modeltests/many_to_one/tests.py index 9f60c21f47..4f561b40ca 100644 --- a/tests/modeltests/many_to_one/tests.py +++ b/tests/modeltests/many_to_one/tests.py @@ -399,3 +399,13 @@ class ManyToOneTests(TestCase): self.assertEqual(repr(a3), repr(Article.objects.get(reporter_id=self.r2.id, pub_date=datetime(2011, 5, 7)))) + + def test_manager_class_caching(self): + r1 = Reporter.objects.create(first_name='Mike') + r2 = Reporter.objects.create(first_name='John') + + # Same twice + self.assertTrue(r1.article_set.__class__ is r1.article_set.__class__) + + # Same as each other + self.assertTrue(r1.article_set.__class__ is r2.article_set.__class__) diff --git a/tests/regressiontests/m2m_regress/tests.py b/tests/regressiontests/m2m_regress/tests.py index 7bf2381a91..9ae888a6ce 100644 --- a/tests/regressiontests/m2m_regress/tests.py +++ b/tests/regressiontests/m2m_regress/tests.py @@ -73,3 +73,17 @@ class M2MRegressionTests(TestCase): self.assertQuerysetEqual(c1.tags.all(), ["", ""]) self.assertQuerysetEqual(t1.tag_collections.all(), [""]) + + def test_manager_class_caching(self): + e1 = Entry.objects.create() + e2 = Entry.objects.create() + t1 = Tag.objects.create() + t2 = Tag.objects.create() + + # Get same manager twice in a row: + self.assertTrue(t1.entry_set.__class__ is t1.entry_set.__class__) + self.assertTrue(e1.topics.__class__ is e1.topics.__class__) + + # Get same manager for different instances + self.assertTrue(e1.topics.__class__ is e2.topics.__class__) + self.assertTrue(t1.entry_set.__class__ is t2.entry_set.__class__) -- cgit v1.3