diff --git a/bds/templates/bds/user_update.html b/bds/templates/bds/user_update.html index 663ed91f..0704c9f0 100644 --- a/bds/templates/bds/user_update.html +++ b/bds/templates/bds/user_update.html @@ -4,21 +4,23 @@ {% block content %} -{% for error in user_form.non_field_errors %} -

{{ error }}

-{% endfor %} -{% for error in profile_form.non_field_errors %} -

{{ error }}

+{% for form in forms.values %} + {% for error in form.non_field_errors %} +
+ {{ error }} +
+ {% endfor %} {% endfor %} -

{% trans "Modification de l'utilisateur " %}{{user_form.instance.username}}

+

{% trans "Modification du profil " %}{{ view.user.username }}

{% csrf_token %} - {% include "bds/forms/form.html" with form=user_form errors=False %} - {% include "bds/forms/form.html" with form=profile_form errors=False %} + {% for form in forms.values %} + {% include "bds/forms/form.html" with form=form errors=False %} + {% endfor %}

diff --git a/bds/views.py b/bds/views.py index 5263efe2..67c1f50c 100644 --- a/bds/views.py +++ b/bds/views.py @@ -1,12 +1,13 @@ from django.contrib import messages from django.contrib.auth import get_user_model from django.shortcuts import get_object_or_404 +from django.urls import reverse from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView from bds.autocomplete import bds_search from bds.forms import ProfileForm, UserForm -from bds.mixins import StaffRequiredMixin +from bds.mixins import MultipleFormView, StaffRequiredMixin from shared.views import AutocompleteView User = get_user_model() @@ -21,41 +22,39 @@ class Home(StaffRequiredMixin, TemplateView): template_name = "bds/home.html" -class UserUpdateView(StaffRequiredMixin, TemplateView): +class UserUpdateView(StaffRequiredMixin, MultipleFormView): template_name = "bds/user_update.html" - def get_user(self): - return get_object_or_404(User, pk=self.kwargs["pk"]) + form_classes = { + "user": UserForm, + "profile": ProfileForm, + } - def get_user_form(self, data=None): - return UserForm(prefix="u", instance=self.user, data=data) + def dispatch(self, request, *args, **kwargs): + self.user = get_object_or_404(User, pk=self.kwargs["pk"]) + return super().dispatch(request, *args, **kwargs) - def get_profile_form(self, data=None): - profile = getattr(self.user, "bds", None) - return ProfileForm(prefix="p", instance=profile, data=data) + def get_user_instance(self): + return self.user - def get_context_data(self, user_form=None, profile_form=None, **kwargs): - return { - "user_form": user_form or self.get_user_form(), - "profile_form": profile_form or self.get_profile_form(), - } + def get_profile_instance(self): + return getattr(self.user, "bds", None) - def get(self, *args, **kwargs): - self.user = self.get_user() - return super().get(*args, **kwargs) + def get_success_url(self): + return reverse("bds:user.update", args=(self.user.pk,)) - def post(self, request, *args, **kwargs): - self.user = self.get_user() - user_form = self.get_user_form(data=request.POST) - profile_form = self.get_profile_form(data=request.POST) + def form_valid(self, forms): + user = forms["user"].save() + profile = forms["profile"].save(commit=False) + profile.user = user + profile.save() + messages.success(self.request, _("Profil mis à jour avec succès !")) - if user_form.is_valid() and profile_form.is_valid(): - self.user = user_form.save() - profile = profile_form.save(commit=False) - profile.user = self.user - profile.save() - messages.success(self.request, _("Profil mis à jour avec succès")) + return super().form_valid(forms) + def form_invalid(self, forms): + messages.error(self.request, _("Veuillez corriger les erreurs ci-dessous")) + return super().form_invalid(forms) else: messages.error(self.request, _("Veuillez corriger les erreurs ci-dessous"))