1
0
mirror of https://github.com/django/django.git synced 2025-10-31 09:41:08 +00:00

Fixed #9602 -- Added AdminSite.get_model_admin().

This allows retrieving an admin class for the given model class without
using internal attributes.
This commit is contained in:
Mariusz Felisiak
2023-07-07 08:06:01 +02:00
committed by GitHub
parent d569c1dcfe
commit f64fd47a76
15 changed files with 127 additions and 69 deletions

View File

@@ -22,13 +22,13 @@ class TestRegistration(SimpleTestCase):
def test_bare_registration(self):
self.site.register(Person)
self.assertIsInstance(self.site._registry[Person], admin.ModelAdmin)
self.assertIsInstance(self.site.get_model_admin(Person), admin.ModelAdmin)
self.site.unregister(Person)
self.assertEqual(self.site._registry, {})
def test_registration_with_model_admin(self):
self.site.register(Person, NameAdmin)
self.assertIsInstance(self.site._registry[Person], NameAdmin)
self.assertIsInstance(self.site.get_model_admin(Person), NameAdmin)
self.site.unregister(Person)
self.assertEqual(self.site._registry, {})
@@ -57,22 +57,28 @@ class TestRegistration(SimpleTestCase):
def test_registration_with_star_star_options(self):
self.site.register(Person, search_fields=["name"])
self.assertEqual(self.site._registry[Person].search_fields, ["name"])
self.assertEqual(self.site.get_model_admin(Person).search_fields, ["name"])
def test_get_model_admin_unregister_model(self):
msg = "The model Person is not registered."
with self.assertRaisesMessage(admin.sites.NotRegistered, msg):
self.site.get_model_admin(Person)
def test_star_star_overrides(self):
self.site.register(
Person, NameAdmin, search_fields=["name"], list_display=["__str__"]
)
self.assertEqual(self.site._registry[Person].search_fields, ["name"])
self.assertEqual(self.site._registry[Person].list_display, ["__str__"])
self.assertTrue(self.site._registry[Person].save_on_top)
person_admin = self.site.get_model_admin(Person)
self.assertEqual(person_admin.search_fields, ["name"])
self.assertEqual(person_admin.list_display, ["__str__"])
self.assertIs(person_admin.save_on_top, True)
def test_iterable_registration(self):
self.site.register([Person, Place], search_fields=["name"])
self.assertIsInstance(self.site._registry[Person], admin.ModelAdmin)
self.assertEqual(self.site._registry[Person].search_fields, ["name"])
self.assertIsInstance(self.site._registry[Place], admin.ModelAdmin)
self.assertEqual(self.site._registry[Place].search_fields, ["name"])
self.assertIsInstance(self.site.get_model_admin(Person), admin.ModelAdmin)
self.assertEqual(self.site.get_model_admin(Person).search_fields, ["name"])
self.assertIsInstance(self.site.get_model_admin(Place), admin.ModelAdmin)
self.assertEqual(self.site.get_model_admin(Place).search_fields, ["name"])
self.site.unregister([Person, Place])
self.assertEqual(self.site._registry, {})
@@ -116,18 +122,26 @@ class TestRegistrationDecorator(SimpleTestCase):
def test_basic_registration(self):
register(Person)(NameAdmin)
self.assertIsInstance(self.default_site._registry[Person], admin.ModelAdmin)
self.assertIsInstance(
self.default_site.get_model_admin(Person), admin.ModelAdmin
)
self.default_site.unregister(Person)
def test_custom_site_registration(self):
register(Person, site=self.custom_site)(NameAdmin)
self.assertIsInstance(self.custom_site._registry[Person], admin.ModelAdmin)
self.assertIsInstance(
self.custom_site.get_model_admin(Person), admin.ModelAdmin
)
def test_multiple_registration(self):
register(Traveler, Place)(NameAdmin)
self.assertIsInstance(self.default_site._registry[Traveler], admin.ModelAdmin)
self.assertIsInstance(
self.default_site.get_model_admin(Traveler), admin.ModelAdmin
)
self.default_site.unregister(Traveler)
self.assertIsInstance(self.default_site._registry[Place], admin.ModelAdmin)
self.assertIsInstance(
self.default_site.get_model_admin(Place), admin.ModelAdmin
)
self.default_site.unregister(Place)
def test_wrapped_class_not_a_model_admin(self):