from rest_framework.response import Response from django import forms from misago.users.profilefields import profilefields, serialize_profilefields_data def edit_details_endpoint(request, user): if request.method == "GET": return get_form_description(request, user) return submit_form(request, user) def get_form_description(request, user): groups = [] for group in profilefields.get_fields_groups(): group_fields = [] for field in group["fields"]: if field.is_editable(request, user): group_fields.append(field.get_form_field_json(request, user)) if group_fields: groups.append({"name": group["name"], "fields": group_fields}) return Response(groups) def submit_form(request, user): fields = [] for field in profilefields.get_fields(): if field.is_editable(request, user): fields.append(field) form = DetailsForm(request.data, request=request, user=user) if form.is_valid(): profilefields.update_user_profile_fields(request, user, form) user.save(update_fields=["profile_fields"]) return Response(serialize_profilefields_data(request, profilefields, user)) return Response(form.errors, status=400) class DetailsForm(forms.Form): def __init__(self, *args, **kwargs): self.request = kwargs.pop("request") self.user = kwargs.pop("user") super().__init__(*args, **kwargs) profilefields.add_fields_to_form(self.request, self.user, self) def clean(self): data = super().clean() return profilefields.clean_form(self.request, self.user, self, data)