summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-02-23 13:43:21 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-02-23 13:43:21 +0000
commit12bd7bcb35703c2d2d19f6b79140d727ddee6e5f (patch)
tree3a9d787b600205ef66dcf7a653b1917d1c807cb3
parent7aa84917a4ae8ca380fea1ae1937706d367389ed (diff)
Fixed #12004 -- Improved error reporting when an abstract class is registered with the admin. Thanks to Matt Smalley for the report, and to mk and Julien Phalip for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15636 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/contrib/admin/sites.py6
-rw-r--r--tests/regressiontests/admin_registration/models.py6
-rw-r--r--tests/regressiontests/admin_registration/tests.py11
3 files changed, 20 insertions, 3 deletions
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index c1f6970193..4585627a0b 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -61,6 +61,8 @@ class AdminSite(object):
they'll be applied as options to the admin class.
If a model is already registered, this will raise AlreadyRegistered.
+
+ If a model is abstract, this will raise ImproperlyConfigured.
"""
if not admin_class:
admin_class = ModelAdmin
@@ -74,6 +76,10 @@ class AdminSite(object):
if isinstance(model_or_iterable, ModelBase):
model_or_iterable = [model_or_iterable]
for model in model_or_iterable:
+ if model._meta.abstract:
+ raise ImproperlyConfigured('The model %s is abstract, so it '
+ 'cannot be registered with admin.' % model.__name__)
+
if model in self._registry:
raise AlreadyRegistered('The model %s is already registered' % model.__name__)
diff --git a/tests/regressiontests/admin_registration/models.py b/tests/regressiontests/admin_registration/models.py
index 4a2d4e9614..61689f31b7 100644
--- a/tests/regressiontests/admin_registration/models.py
+++ b/tests/regressiontests/admin_registration/models.py
@@ -7,5 +7,9 @@ from django.db import models
class Person(models.Model):
name = models.CharField(max_length=200)
-class Place(models.Model):
+class Location(models.Model):
+ class Meta:
+ abstract = True
+
+class Place(Location):
name = models.CharField(max_length=200)
diff --git a/tests/regressiontests/admin_registration/tests.py b/tests/regressiontests/admin_registration/tests.py
index e2a5d7e017..92e9d8a21e 100644
--- a/tests/regressiontests/admin_registration/tests.py
+++ b/tests/regressiontests/admin_registration/tests.py
@@ -1,8 +1,8 @@
from django.test import TestCase
-
+from django.core.exceptions import ImproperlyConfigured
from django.contrib import admin
-from models import Person, Place
+from models import Person, Place, Location
class NameAdmin(admin.ModelAdmin):
list_display = ['name']
@@ -52,3 +52,10 @@ class TestRegistration(TestCase):
isinstance(self.site._registry[Place], admin.options.ModelAdmin)
)
self.assertEqual(self.site._registry[Place].search_fields, ['name'])
+
+ def test_abstract_model(self):
+ """
+ Exception is raised when trying to register an abstract model.
+ Refs #12004.
+ """
+ self.assertRaises(ImproperlyConfigured, self.site.register, Location)