Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #12004 -- Improved error reporting when an abstract class is re…

…gistered 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
  • Loading branch information...
commit 12bd7bcb35703c2d2d19f6b79140d727ddee6e5f 1 parent 7aa8491
@freakboy3742 freakboy3742 authored
View
6 django/contrib/admin/sites.py
@@ -61,6 +61,8 @@ def register(self, model_or_iterable, admin_class=None, **options):
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 @@ def register(self, model_or_iterable, admin_class=None, **options):
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__)
View
6 tests/regressiontests/admin_registration/models.py
@@ -7,5 +7,9 @@
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)
View
11 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 @@ def test_iterable_registration(self):
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)
Please sign in to comment.
Something went wrong with that request. Please try again.