summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Meyer <carl@oddbird.net>2011-09-23 04:22:30 +0000
committerCarl Meyer <carl@oddbird.net>2011-09-23 04:22:30 +0000
commit0a9c52e013dede9c765fb2550cdef17caaafdccd (patch)
treed8da3f06d38da9368f879fdda9ad4811917110a6
parent4dab2d2f6b6327965872608febe798cc88f668bf (diff)
Fixed #16917 -- Don't try to use the model name for a ContentType's unicode representation if the model no longer exists. Thanks Ivan Sagalaev for report and patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16895 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/contenttypes/models.py6
-rw-r--r--django/contrib/contenttypes/tests.py13
2 files changed, 16 insertions, 3 deletions
diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py
index 2f20797e95..9ab059eaec 100644
--- a/django/contrib/contenttypes/models.py
+++ b/django/contrib/contenttypes/models.py
@@ -92,11 +92,11 @@ class ContentType(models.Model):
#
# We return self.name only when users have changed its value from the
# initial verbose_name_raw and might rely on it.
- meta = self.model_class()._meta
- if self.name != meta.verbose_name_raw:
+ model = self.model_class()
+ if not model or self.name != model._meta.verbose_name_raw:
return self.name
else:
- return force_unicode(meta.verbose_name)
+ return force_unicode(model._meta.verbose_name)
def model_class(self):
"Returns the Python model class for this type of content."
diff --git a/django/contrib/contenttypes/tests.py b/django/contrib/contenttypes/tests.py
index fd624c3377..fa3878c553 100644
--- a/django/contrib/contenttypes/tests.py
+++ b/django/contrib/contenttypes/tests.py
@@ -109,3 +109,16 @@ class ContentTypesTests(TestCase):
obj = FooWithoutUrl.objects.create(name="john")
self.assertRaises(Http404, shortcut, request, user_ct.id, obj.id)
+
+ def test_missing_model(self):
+ """
+ Ensures that displaying content types in admin (or anywhere) doesn't
+ break on leftover content type records in the DB for which no model
+ is defined anymore.
+ """
+ ct = ContentType.objects.create(
+ name = 'Old model',
+ app_label = 'contenttypes',
+ model = 'OldModel',
+ )
+ self.assertEqual(unicode(ct), u'Old model')