diff options
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/contrib/contenttypes/admin.py | 12 | ||||
| -rw-r--r-- | tests/generic_inline_admin/tests.py | 11 |
3 files changed, 18 insertions, 6 deletions
@@ -668,6 +668,7 @@ answer newbie questions, and generally made Django that much better: Mads Jensen <https://github.com/atombrella> Makoto Tsuyuki <mtsuyuki@gmail.com> Malcolm Tredinnick + Manas Madeshiya <manas112madeshiya@gmail.com> Manav Agarwal <dpsman13016@gmail.com> Manuel Saelices <msaelices@yaco.es> 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) |
