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. |         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__) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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) | ||||||
|   | |||||||
| @@ -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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user