From c273f5b6b7e89611ee0d1a4da6f653fee829b380 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Mon, 17 Jan 2022 23:35:39 +0100
Subject: [PATCH] Fix field disabling in Person form

---
 CHANGELOG.rst         |  1 +
 aleksis/core/forms.py | 13 ++++---------
 2 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index e8e2e1e42..aabf16b06 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -15,6 +15,7 @@ Fixed
 * Signup was forbidden even if it was enabled in settings
 * Phone numbers were not properly linked and suboptimally formatted on person page
 * Favicon upload failed with S3 storage.
+* Some combinations of allowed self-edit fields on persons could cause errors
 
 `2.6`_ - 2022-01-10
 -------------------
diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py
index 4f4414b1b..f313c365e 100644
--- a/aleksis/core/forms.py
+++ b/aleksis/core/forms.py
@@ -108,21 +108,16 @@ class PersonForm(ExtensibleForm):
         request = kwargs.pop("request", None)
         super().__init__(*args, **kwargs)
 
-        # Disable non-editable fields
-        allowed_person_fields = get_site_preferences()["account__editable_fields_person"]
-
         if (
             request
             and self.instance
             and not request.user.has_perm("core.change_person", self.instance)
         ):
-            # First, disable all fields
+            # Disable non-editable fields
+            allowed_person_fields = get_site_preferences()["account__editable_fields_person"]
             for field in self.fields:
-                self.fields[field].disabled = True
-
-            # Then, activate allowed fields
-            for field in allowed_person_fields:
-                self.fields[field].disabled = False
+                if field not in allowed_person_fields:
+                    self.fields[field].disabled = True
 
     def clean(self) -> None:
         user = get_user_model()
-- 
GitLab