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:
parent
7aa84917a4
commit
12bd7bcb35
|
@ -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__)
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue