From 1172a7e818422958401b466215103c2d8d1132f6 Mon Sep 17 00:00:00 2001 From: Ian Foote Date: Wed, 30 Jul 2014 17:17:23 +0100 Subject: [PATCH] Fix bug where get_fieldsets is called twice * If get_fieldsets is called twice, the 'is_active' field will already have been replaced by ('is_active', 'email_verification_required') * Reverts 49105af * Update CHANGELOG --- CHANGELOG.md | 4 ++++ user_management/models/admin.py | 8 +++++++- user_management/models/tests/test_admin.py | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e2841b..c04cbac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## Upcoming Release + +* Fix bug where VerifyUserAdmin.get_fieldsets is called twice + ## v1.2.1 * Bump required version of `incuna-mail` in order to fix circular import. diff --git a/user_management/models/admin.py b/user_management/models/admin.py index 15f5ff4..e977679 100644 --- a/user_management/models/admin.py +++ b/user_management/models/admin.py @@ -55,7 +55,13 @@ def get_fieldsets(self, request, obj=None): except KeyError: return fieldsets - index = fields.index('is_active') + try: + index = fields.index('is_active') + except ValueError: + # If get_fieldsets is called twice, 'is_active' will already be + # removed and fieldsets will be correct so return it + return fieldsets + fields[index] = ('is_active', 'email_verification_required') fieldsets_dict['Permissions']['fields'] = tuple(fields) return tuple(fieldsets_dict.items()) diff --git a/user_management/models/tests/test_admin.py b/user_management/models/tests/test_admin.py index 46f430a..6b688e5 100644 --- a/user_management/models/tests/test_admin.py +++ b/user_management/models/tests/test_admin.py @@ -48,3 +48,9 @@ def test_fieldsets(self): verify_user_admin.get_fieldsets(request=None, obj=user), expected_fieldsets, ) + + # Django admin can call get_fieldsets twice, so check we don't break + self.assertEqual( + verify_user_admin.get_fieldsets(request=None, obj=user), + expected_fieldsets, + )