diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2011-02-23 13:43:21 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2011-02-23 13:43:21 +0000 |
| commit | 12bd7bcb35703c2d2d19f6b79140d727ddee6e5f (patch) | |
| tree | 3a9d787b600205ef66dcf7a653b1917d1c807cb3 | |
| parent | 7aa84917a4ae8ca380fea1ae1937706d367389ed (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.py | 6 | ||||
| -rw-r--r-- | tests/regressiontests/admin_registration/models.py | 6 | ||||
| -rw-r--r-- | tests/regressiontests/admin_registration/tests.py | 11 |
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) |
