summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/contrib/contenttypes/models.py1
-rw-r--r--django/contrib/contenttypes/tests.py18
-rw-r--r--tests/regressiontests/comment_tests/tests/templatetag_tests.py7
3 files changed, 18 insertions, 8 deletions
diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py
index 1bb07e0d52..6d919b4237 100644
--- a/django/contrib/contenttypes/models.py
+++ b/django/contrib/contenttypes/models.py
@@ -13,6 +13,7 @@ class ContentTypeManager(models.Manager):
ct = self.__class__._cache[self.db][(app_label, model)]
except KeyError:
ct = self.get(app_label=app_label, model=model)
+ self._add_to_cache(self.db, ct)
return ct
def _get_opts(self, model):
diff --git a/django/contrib/contenttypes/tests.py b/django/contrib/contenttypes/tests.py
index f2a338e1d4..3b7906c812 100644
--- a/django/contrib/contenttypes/tests.py
+++ b/django/contrib/contenttypes/tests.py
@@ -51,8 +51,8 @@ class ContentTypesTests(TestCase):
def test_lookup_cache(self):
"""
Make sure that the content type cache (see ContentTypeManager)
- works correctly. Lookups for a particular content type -- by model or
- by ID -- should hit the database only on the first lookup.
+ works correctly. Lookups for a particular content type -- by model, ID
+ or natural key -- should hit the database only on the first lookup.
"""
# At this point, a lookup for a ContentType should hit the DB
@@ -60,16 +60,30 @@ class ContentTypesTests(TestCase):
ContentType.objects.get_for_model(ContentType)
# A second hit, though, won't hit the DB, nor will a lookup by ID
+ # or natural key
with self.assertNumQueries(0):
ct = ContentType.objects.get_for_model(ContentType)
with self.assertNumQueries(0):
ContentType.objects.get_for_id(ct.id)
+ with self.assertNumQueries(0):
+ ContentType.objects.get_by_natural_key('contenttypes',
+ 'contenttype')
# Once we clear the cache, another lookup will again hit the DB
ContentType.objects.clear_cache()
with self.assertNumQueries(1):
ContentType.objects.get_for_model(ContentType)
+ # The same should happen with a lookup by natural key
+ ContentType.objects.clear_cache()
+ with self.assertNumQueries(1):
+ ContentType.objects.get_by_natural_key('contenttypes',
+ 'contenttype')
+ # And a second hit shouldn't hit the DB
+ with self.assertNumQueries(0):
+ ContentType.objects.get_by_natural_key('contenttypes',
+ 'contenttype')
+
def test_get_for_models_empty_cache(self):
# Empty cache.
with self.assertNumQueries(1):
diff --git a/tests/regressiontests/comment_tests/tests/templatetag_tests.py b/tests/regressiontests/comment_tests/tests/templatetag_tests.py
index de397678cd..0b036ce921 100644
--- a/tests/regressiontests/comment_tests/tests/templatetag_tests.py
+++ b/tests/regressiontests/comment_tests/tests/templatetag_tests.py
@@ -130,8 +130,7 @@ class CommentTemplateTagTests(CommentTestCase):
with self.assertNumQueries(4):
self.testRenderCommentListFromObject()
- # Force the CT to be cached
- ct = ContentType.objects.get_for_model(Article)
+ # CT's should be cached
with self.assertNumQueries(3):
self.testRenderCommentListFromObject()
@@ -141,7 +140,6 @@ class CommentTemplateTagTests(CommentTestCase):
with self.assertNumQueries(4):
self.verifyGetCommentList()
- ct = ContentType.objects.get_for_model(Author)
with self.assertNumQueries(3):
self.verifyGetCommentList()
@@ -151,7 +149,6 @@ class CommentTemplateTagTests(CommentTestCase):
with self.assertNumQueries(3):
self.testRenderCommentForm()
- ct = ContentType.objects.get_for_model(Article)
with self.assertNumQueries(2):
self.testRenderCommentForm()
@@ -161,7 +158,6 @@ class CommentTemplateTagTests(CommentTestCase):
with self.assertNumQueries(3):
self.testGetCommentForm()
- ct = ContentType.objects.get_for_model(Article)
with self.assertNumQueries(2):
self.testGetCommentForm()
@@ -171,6 +167,5 @@ class CommentTemplateTagTests(CommentTestCase):
with self.assertNumQueries(3):
self.verifyGetCommentCount()
- ct = ContentType.objects.get_for_model(Article)
with self.assertNumQueries(2):
self.verifyGetCommentCount()