Commit 12bd7bcb authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #12004 -- Improved error reporting when an abstract class is registered...

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
parent 7aa84917
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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__)

+5 −1
Original line number Diff line number Diff line
@@ -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)
+9 −2
Original line number Diff line number Diff line
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)