From e1df3950b2a3a852dfa9eb70738b7bac28cb0a0e Mon Sep 17 00:00:00 2001 From: Manas225 Date: Mon, 9 Mar 2026 22:54:34 +0530 Subject: Fixed #36979 -- Made GenericInlineModelAdmin.get_formset() use get_exclude(). --- AUTHORS | 1 + django/contrib/contenttypes/admin.py | 12 ++++++------ tests/generic_inline_admin/tests.py | 11 +++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/AUTHORS b/AUTHORS index 510469182a..c85a9a23e3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -668,6 +668,7 @@ answer newbie questions, and generally made Django that much better: Mads Jensen Makoto Tsuyuki Malcolm Tredinnick + Manas Madeshiya Manav Agarwal Manuel Saelices Manuzhai diff --git a/django/contrib/contenttypes/admin.py b/django/contrib/contenttypes/admin.py index d324a4f4fe..c55325ecbe 100644 --- a/django/contrib/contenttypes/admin.py +++ b/django/contrib/contenttypes/admin.py @@ -100,12 +100,12 @@ class GenericInlineModelAdmin(InlineModelAdmin): fields = kwargs.pop("fields") else: fields = flatten_fieldsets(self.get_fieldsets(request, obj)) - exclude = [*(self.exclude or []), *self.get_readonly_fields(request, obj)] - if ( - self.exclude is None - and hasattr(self.form, "_meta") - and self.form._meta.exclude - ): + excluded = self.get_exclude(request, obj) + exclude = [ + *(excluded or []), + *self.get_readonly_fields(request, obj), + ] + if excluded is None and hasattr(self.form, "_meta") and self.form._meta.exclude: # Take the custom ModelForm's Meta.exclude into account only if the # GenericInlineModelAdmin doesn't define its own. exclude.extend(self.form._meta.exclude) diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py index b4833e54e7..01346f500e 100644 --- a/tests/generic_inline_admin/tests.py +++ b/tests/generic_inline_admin/tests.py @@ -577,3 +577,14 @@ class GenericInlineModelAdminTest(SimpleTestCase): request.name = name self.assertEqual(ma.get_inlines(request, None), (inline_class,)) self.assertEqual(type(ma.get_inline_instances(request)[0]), inline_class) + + def test_get_exclude_is_respected(self): + class GetExcludeInline(GenericTabularInline): + model = Media + + def get_exclude(self, request, obj=None): + return ["url"] + + ma = GetExcludeInline(Media, self.site) + formset = ma.get_formset(request) + self.assertNotIn("url", formset.form.base_fields) -- cgit v1.3