Skip to content

Commit 013db6b

Browse files
committed
Fixed django#18051 -- Allowed admin fieldsets to contain lists
Thanks Ricardo di Virgilio for the report, Mateus Gondim for the patch and Nick Sandford for the review.
1 parent c6e0ded commit 013db6b

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

django/contrib/admin/util.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,7 @@ def flatten_fieldsets(fieldsets):
8888
field_names = []
8989
for name, opts in fieldsets:
9090
for field in opts['fields']:
91-
# type checking feels dirty, but it seems like the best way here
92-
if type(field) == tuple:
91+
if isinstance(field, (list, tuple)):
9392
field_names.extend(field)
9493
else:
9594
field_names.append(field)

tests/regressiontests/admin_util/tests.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
from django.conf import settings
66
from django.contrib import admin
77
from django.contrib.admin import helpers
8-
from django.contrib.admin.util import (display_for_field, label_for_field,
9-
lookup_field, NestedObjects)
8+
from django.contrib.admin.util import (display_for_field, flatten_fieldsets,
9+
label_for_field, lookup_field, NestedObjects)
1010
from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
1111
from django.contrib.sites.models import Site
1212
from django.db import models, DEFAULT_DB_ALIAS
@@ -300,3 +300,21 @@ class MyForm(forms.Form):
300300
'<label for="id_text" class="required inline">&amp;text:</label>')
301301
self.assertEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
302302
'<label for="id_cb" class="vCheckboxLabel required inline">&amp;cb</label>')
303+
304+
def test_flatten_fieldsets(self):
305+
"""
306+
Regression test for #18051
307+
"""
308+
fieldsets = (
309+
(None, {
310+
'fields': ('url', 'title', ('content', 'sites'))
311+
}),
312+
)
313+
self.assertEqual(flatten_fieldsets(fieldsets), ['url', 'title', 'content', 'sites'])
314+
315+
fieldsets = (
316+
(None, {
317+
'fields': ['url', 'title', ['content', 'sites'])
318+
}),
319+
)
320+
self.assertEqual(flatten_fieldsets(fieldsets), ['url', 'title', 'content', 'sites'])

0 commit comments

Comments
 (0)