12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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)
|