summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Bistuer <loic.bistuer@sixmedia.com>2013-07-31 12:50:39 +0700
committerTim Graham <timograham@gmail.com>2013-08-02 10:45:58 -0400
commit4f8fb199948eab417961a8df66e5c41354d9fd0d (patch)
tree5edb010dec5b788e249ddbbf1b7e37c1b3bf5c7b
parentb0bde218847692096b08d27aa37eba1745cacca8 (diff)
[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
-rw-r--r--django/contrib/contenttypes/generic.py6
-rw-r--r--tests/generic_inline_admin/tests.py20
2 files changed, 23 insertions, 3 deletions
diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
index e14aa5ecee..c1db206515 100644
--- a/django/contrib/contenttypes/generic.py
+++ b/django/contrib/contenttypes/generic.py
@@ -465,10 +465,10 @@ class GenericInlineModelAdmin(InlineModelAdmin):
formset = BaseGenericInlineFormSet
def get_formset(self, request, obj=None, **kwargs):
- if self.declared_fieldsets:
- fields = flatten_fieldsets(self.declared_fieldsets)
+ if 'fields' in kwargs:
+ fields = kwargs.pop('fields')
else:
- fields = None
+ fields = flatten_fieldsets(self.get_fieldsets(request, obj))
if self.exclude is None:
exclude = []
else:
diff --git a/tests/generic_inline_admin/tests.py b/tests/generic_inline_admin/tests.py
index ac2c191183..efa40ca3d9 100644
--- a/tests/generic_inline_admin/tests.py
+++ b/tests/generic_inline_admin/tests.py
@@ -325,3 +325,23 @@ class GenericInlineModelAdminTest(TestCase):
self.assertEqual(
list(list(ma.get_formsets(request))[0]().forms[0].fields),
['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'])