0
0
mirror of https://github.com/django/django.git synced 2024-12-01 15:42:04 +01:00

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
This commit is contained in:
Russell Keith-Magee 2011-02-23 13:43:21 +00:00
parent 7aa84917a4
commit 12bd7bcb35
3 changed files with 20 additions and 3 deletions

View File

@ -61,6 +61,8 @@ class AdminSite(object):
they'll be applied as options to the admin class. they'll be applied as options to the admin class.
If a model is already registered, this will raise AlreadyRegistered. If a model is already registered, this will raise AlreadyRegistered.
If a model is abstract, this will raise ImproperlyConfigured.
""" """
if not admin_class: if not admin_class:
admin_class = ModelAdmin admin_class = ModelAdmin
@ -74,6 +76,10 @@ class AdminSite(object):
if isinstance(model_or_iterable, ModelBase): if isinstance(model_or_iterable, ModelBase):
model_or_iterable = [model_or_iterable] model_or_iterable = [model_or_iterable]
for model in 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: if model in self._registry:
raise AlreadyRegistered('The model %s is already registered' % model.__name__) raise AlreadyRegistered('The model %s is already registered' % model.__name__)

View File

@ -7,5 +7,9 @@ from django.db import models
class Person(models.Model): class Person(models.Model):
name = models.CharField(max_length=200) 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) name = models.CharField(max_length=200)

View File

@ -1,8 +1,8 @@
from django.test import TestCase from django.test import TestCase
from django.core.exceptions import ImproperlyConfigured
from django.contrib import admin from django.contrib import admin
from models import Person, Place from models import Person, Place, Location
class NameAdmin(admin.ModelAdmin): class NameAdmin(admin.ModelAdmin):
list_display = ['name'] list_display = ['name']
@ -52,3 +52,10 @@ class TestRegistration(TestCase):
isinstance(self.site._registry[Place], admin.options.ModelAdmin) isinstance(self.site._registry[Place], admin.options.ModelAdmin)
) )
self.assertEqual(self.site._registry[Place].search_fields, ['name']) 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)