123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from rest_framework.response import Response
- from django import forms
- from misago.users.profilefields import profilefields, serialize_profilefields_data
- def change_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.can_edit(request, user):
- group_fields.append(field.get_edit_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.can_edit(request, user):
- fields.append(field)
- form = DetailsForm(
- request.data,
- request=request,
- user=user,
- profilefields=fields,
- )
- if form.is_valid():
- user.profile_fields = form.cleaned_data
- 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')
- self.profilefields = kwargs.pop('profilefields')
- super(DetailsForm, self).__init__(*args, **kwargs)
- for field in self.profilefields:
- self.fields[field.fieldname] = field.get_field_for_validation(
- self.request, self.user)
- def clean(self):
- data = super(DetailsForm, self).clean()
- for field in self.profilefields:
- if field.fieldname in data:
- try:
- data[field.fieldname] = field.clean_field(
- self.request, self.user, data[field.fieldname])
- except forms.ValidationError as e:
- self.add_error(field.fieldname, e)
- return data
|