from django.contrib import messages from django.contrib.auth import get_user_model from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView from bds.autocomplete import bds_search from bds.forms import BDSProfileForm, BDSUserForm from bds.mixins import StaffRequiredMixin User = get_user_model() class AutocompleteView(StaffRequiredMixin, TemplateView): template_name = "bds/search_results.html" def get_context_data(self, *args, **kwargs): ctx = super().get_context_data(*args, **kwargs) if "q" not in self.request.GET: raise Http404 q = self.request.GET["q"] ctx["q"] = q results = bds_search.search(q.split()) ctx.update(results) ctx["total"] = sum((len(r) for r in results.values())) return ctx class Home(StaffRequiredMixin, TemplateView): template_name = "bds/home.html" class UserUpdateView(StaffRequiredMixin, TemplateView): template_name = "bds/user_update.html" def setup(self, *args, **kwargs): super().setup(*args, **kwargs) self.user = get_object_or_404(User, pk=self.kwargs["pk"]) def get_context_data(self, **kwargs): ctx = super().get_context_data(**kwargs) form_data = self.request.POST if self.request.method == "POST" else None profile = getattr(self.user, "bds", None) ctx["user_form"] = BDSUserForm(prefix="user", intance=self.user, data=form_data) ctx["profile_form"] = BDSProfileForm( prefix="profile", instance=profile, data=form_data ) return ctx def post(self, *args, **kwargs): ctx = self.get_context_data() user_form = ctx["user_form"] profile_form = ctx["profile_form"] if user_form.is_valid() and profile_form.is_valid(): user_form.save() profile_form.save() messages.add_message( self.request, messages.SUCCESS, _("Compte mis à jour avec succès !") ) else: messages.add_message( self.request, messages.ERROR, _("Le formulaire de mise à jour du compte contient des erreurs."), ) # Redirect here. return HttpResponseRedirect("")