summaryrefslogtreecommitdiff
path: root/django/contrib/admin/utils.py
diff options
context:
space:
mode:
authorAaron France <aaron.l.france@gmail.com>2014-02-15 11:28:09 +0100
committerBaptiste Mispelon <bmispelon@gmail.com>2014-02-15 15:01:44 +0100
commit23b781cc3d17f12c5158f781b2c8cd9d47550c20 (patch)
treea832668067ead7c6496a820c3e8b65809e8dfe05 /django/contrib/admin/utils.py
parent2ebccebf0609229317c2f5b9a76664dc216f27eb (diff)
downloaddjango-23b781cc3d17f12c5158f781b2c8cd9d47550c20.tar.gz
Fixed #22018 -- Fixed checks for ModelAdmin.fields not handling sub-lists.
Flatten a level of sublists before checking for duplicate fields. When given sublists such as: ```python class FooAdmin(admin.ModelAdmin): fields = ('one', ('one', 'two')) ``` The previous code did not correctly detect the duplicated 'one' field. Thanks to jwa for the report.
Diffstat (limited to 'django/contrib/admin/utils.py')
-rw-r--r--django/contrib/admin/utils.py20
1 files changed, 15 insertions, 5 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py
index a2f2e9fa7b..b52300756b 100644
--- a/django/contrib/admin/utils.py
+++ b/django/contrib/admin/utils.py
@@ -83,15 +83,25 @@ def unquote(s):
return "".join(res)
+def flatten(fields):
+ """Returns a list which is a single level of flattening of the
+ original list."""
+ flat = []
+ for field in fields:
+ if isinstance(field, (list, tuple)):
+ flat.extend(field)
+ else:
+ flat.append(field)
+ return flat
+
+
def flatten_fieldsets(fieldsets):
"""Returns a list of field names from an admin fieldsets structure."""
field_names = []
for name, opts in fieldsets:
- for field in opts['fields']:
- if isinstance(field, (list, tuple)):
- field_names.extend(field)
- else:
- field_names.append(field)
+ field_names.extend(
+ flatten(opts['fields'])
+ )
return field_names