From c464cf88ff5eeabea0109daee35dba8a32f8644d Mon Sep 17 00:00:00 2001 From: Paulo Date: Sat, 18 Jun 2016 22:03:25 -0400 Subject: [PATCH] [1.10.x] Fixed #26729 -- Allowed overriding a form field's label/help_text in Form.__init__() for TabularInline. Backport of 9c2d5a8d333277cc1b482a9d05f174cf4d09f24c from master --- django/contrib/admin/helpers.py | 2 +- tests/admin_inlines/admin.py | 4 ++++ tests/admin_inlines/tests.py | 10 ++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py index a9db82ae781..d5cf38e2eab 100644 --- a/django/contrib/admin/helpers.py +++ b/django/contrib/admin/helpers.py @@ -279,7 +279,7 @@ class InlineAdminFormSet(object): 'help_text': help_text_for_field(field_name, self.opts.model), } else: - form_field = self.formset.form.base_fields[field_name] + form_field = self.formset.empty_form.fields[field_name] label = form_field.label if label is None: label = label_for_field(field_name, self.opts.model, self.opts) diff --git a/tests/admin_inlines/admin.py b/tests/admin_inlines/admin.py index 64c89ebe992..c3bc8d76984 100644 --- a/tests/admin_inlines/admin.py +++ b/tests/admin_inlines/admin.py @@ -192,6 +192,10 @@ class SomeChildModelForm(forms.ModelForm): 'position': forms.HiddenInput, } + def __init__(self, *args, **kwargs): + super(SomeChildModelForm, self).__init__(*args, **kwargs) + self.fields['name'].label = 'new label' + class SomeChildModelInline(admin.TabularInline): model = SomeChildModel diff --git a/tests/admin_inlines/tests.py b/tests/admin_inlines/tests.py index dc94999de45..95e38e8bb74 100644 --- a/tests/admin_inlines/tests.py +++ b/tests/admin_inlines/tests.py @@ -95,6 +95,16 @@ class TestInline(TestDataMixin, TestCase): response = self.client.get(reverse('admin:admin_inlines_titlecollection_add')) self.assertContains(response, 'Title1', html=True) + def test_custom_form_tabular_inline_overridden_label(self): + """ + SomeChildModelForm.__init__() overrides the label of a form field. + That label is displayed in the TabularInline. + """ + response = self.client.get(reverse('admin:admin_inlines_someparentmodel_add')) + field = list(response.context['inline_admin_formset'].fields())[0] + self.assertEqual(field['label'], 'new label') + self.assertContains(response, 'New label', html=True) + def test_tabular_non_field_errors(self): """ Ensure that non_field_errors are displayed correctly, including the