diff options
author | Aaron France <aaron.l.france@gmail.com> | 2014-02-15 11:28:09 +0100 |
---|---|---|
committer | Baptiste Mispelon <bmispelon@gmail.com> | 2014-02-15 15:01:44 +0100 |
commit | 23b781cc3d17f12c5158f781b2c8cd9d47550c20 (patch) | |
tree | a832668067ead7c6496a820c3e8b65809e8dfe05 /django/contrib/admin/utils.py | |
parent | 2ebccebf0609229317c2f5b9a76664dc216f27eb (diff) | |
download | django-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.py | 20 |
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 |