mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00: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:
		| @@ -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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user