Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Fixed #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.
  • Loading branch information...
commit 013db6ba85fb880bd1f9a5ad2e91dc5c1efe197c 1 parent c6e0ded
@claudep claudep authored
View
3  django/contrib/admin/util.py
@@ -88,8 +88,7 @@ def flatten_fieldsets(fieldsets):
field_names = []
for name, opts in fieldsets:
for field in opts['fields']:
- # type checking feels dirty, but it seems like the best way here
- if type(field) == tuple:
+ if isinstance(field, (list, tuple)):
field_names.extend(field)
else:
field_names.append(field)
View
22 tests/regressiontests/admin_util/tests.py
@@ -5,8 +5,8 @@
from django.conf import settings
from django.contrib import admin
from django.contrib.admin import helpers
-from django.contrib.admin.util import (display_for_field, label_for_field,
- lookup_field, NestedObjects)
+from django.contrib.admin.util import (display_for_field, flatten_fieldsets,
+ label_for_field, lookup_field, NestedObjects)
from django.contrib.admin.views.main import EMPTY_CHANGELIST_VALUE
from django.contrib.sites.models import Site
from django.db import models, DEFAULT_DB_ALIAS
@@ -300,3 +300,21 @@ class MyForm(forms.Form):
'<label for="id_text" class="required inline">&amp;text:</label>')
self.assertEqual(helpers.AdminField(form, 'cb', is_first=False).label_tag(),
'<label for="id_cb" class="vCheckboxLabel required inline">&amp;cb</label>')
+
+ def test_flatten_fieldsets(self):
+ """
+ Regression test for #18051
+ """
+ fieldsets = (
+ (None, {
+ 'fields': ('url', 'title', ('content', 'sites'))
+ }),
+ )
+ self.assertEqual(flatten_fieldsets(fieldsets), ['url', 'title', 'content', 'sites'])
+
+ fieldsets = (
+ (None, {
+ 'fields': ['url', 'title', ['content', 'sites'])
+ }),
+ )
+ self.assertEqual(flatten_fieldsets(fieldsets), ['url', 'title', 'content', 'sites'])
Please sign in to comment.
Something went wrong with that request. Please try again.