diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py index 81301cfce16..b025f5aa95b 100644 --- a/django/contrib/contenttypes/generic.py +++ b/django/contrib/contenttypes/generic.py @@ -362,7 +362,7 @@ def generic_inlineformset_factory(model, form=ModelForm, fields=None, exclude=None, extra=3, can_order=False, can_delete=True, max_num=None, - formfield_callback=lambda f: f.formfield()): + formfield_callback=None): """ Returns an ``GenericInlineFormSet`` for the given kwargs. diff --git a/tests/modeltests/generic_relations/tests.py b/tests/modeltests/generic_relations/tests.py index 3d253010ffb..a2bf3bedf64 100644 --- a/tests/modeltests/generic_relations/tests.py +++ b/tests/modeltests/generic_relations/tests.py @@ -1,3 +1,4 @@ +from django import forms from django.contrib.contenttypes.generic import generic_inlineformset_factory from django.contrib.contenttypes.models import ContentType from django.test import TestCase @@ -221,3 +222,23 @@ class GenericRelationsTests(TestCase): formset = GenericFormSet(instance=lion, prefix='x') self.assertEqual(u''.join(form.as_p() for form in formset.forms), u"""
""") + + +class CustomWidget(forms.CharField): + pass + +class TaggedItemForm(forms.ModelForm): + class Meta: + model = TaggedItem + widgets = {'tag': CustomWidget} + +class GenericInlineFormsetTest(TestCase): + """ + Regression for #14572: Using base forms with widgets + defined in Meta should not raise errors. + """ + + def test_generic_inlineformset_factory(self): + Formset = generic_inlineformset_factory(TaggedItem, TaggedItemForm) + form = Formset().forms[0] + self.assertTrue(isinstance(form['tag'].field.widget, CustomWidget))