diff --git a/CHANGELOG.rst b/CHANGELOG.rst index eadc645326bb3d385488c94290a7a90d3324f63c..96580f3e1728884b31900234a92313ffe488b265 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -20,6 +20,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 * Some preferences were required when they shouldn't, and vice versa. * IO errors on accessing backup directory in health check are now properly reported diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py index 4f4414b1b64219d95bfc4669f5f99cef670cc7c8..f313c365e6bdb8d92b6c72cf9747aeadc9a0e367 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()