[1.6.x] Fixed #18681 -- GenericInlineModelAdmin.get_formset() no longer bypasses get_fieldsets().

Refs 23e1b59 which already fixed this issue for ModelAdmin and InlineModelAdmin.

Backport of a0ed2f9260 from master
This commit is contained in:
Loic Bistuer 2013-07-31 12:50:39 +07:00 committed by Tim Graham
parent b0bde21884
commit 4f8fb19994
2 changed files with 23 additions and 3 deletions

View File

@ -465,10 +465,10 @@ class GenericInlineModelAdmin(InlineModelAdmin):
formset = BaseGenericInlineFormSet formset = BaseGenericInlineFormSet
def get_formset(self, request, obj=None, **kwargs): def get_formset(self, request, obj=None, **kwargs):
if self.declared_fieldsets: if 'fields' in kwargs:
fields = flatten_fieldsets(self.declared_fieldsets) fields = kwargs.pop('fields')
else: else:
fields = None fields = flatten_fieldsets(self.get_fieldsets(request, obj))
if self.exclude is None: if self.exclude is None:
exclude = [] exclude = []
else: else:

View File

@ -325,3 +325,23 @@ class GenericInlineModelAdminTest(TestCase):
self.assertEqual( self.assertEqual(
list(list(ma.get_formsets(request))[0]().forms[0].fields), list(list(ma.get_formsets(request))[0]().forms[0].fields),
['description', 'keywords', 'id', 'DELETE']) ['description', 'keywords', 'id', 'DELETE'])
def test_get_fieldsets(self):
# Test that get_fieldsets is called when figuring out form fields.
# Refs #18681.
class MediaForm(ModelForm):
class Meta:
model = Media
fields = '__all__'
class MediaInline(GenericTabularInline):
form = MediaForm
model = Media
can_delete = False
def get_fieldsets(self, request, obj=None):
return [(None, {'fields': ['url', 'description']})]
ma = MediaInline(Media, self.site)
form = ma.get_formset(None).form
self.assertEqual(form._meta.fields, ['url', 'description'])