From 216bd7fab9e167ea142821691117cdebfc2f17ad Mon Sep 17 00:00:00 2001 From: Tom Hubrecht Date: Sun, 20 Dec 2020 10:49:39 +0100 Subject: [PATCH] Jump to next question after a vote --- elections/views.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/elections/views.py b/elections/views.py index 477864d..a960237 100644 --- a/elections/views.py +++ b/elections/views.py @@ -47,8 +47,8 @@ class BackgroundUpdateView(RedirectView): class ElectionCreateView(SuccessMessageMixin, CreateView): model = Election form_class = ElectionForm - template_name = "elections/election_create.html" success_message = _("Élection créée avec succès !") + template_name = "elections/election_create.html" def get_success_url(self): return reverse("election.admin", args=[self.object.pk]) @@ -286,10 +286,22 @@ class ElectionView(DetailView): ) -class VoteView(OpenElectionOnly, SuccessMessageMixin, DetailView): +class VoteView(OpenElectionOnly, DetailView): model = Question template_name = "elections/vote.html" + def get_success_url(self): + questions = list(self.object.election.questions.all()) + q_index = questions.index(self.object) + if q_index + 1 == len(questions): + # On était à la dernière question + return reverse("election.view", args=[self.object.election.pk]) + + # On récupère l'id de la prochaine question + q_next = questions[q_index + 1].pk + + return reverse("election.vote", args=[q_next]) + def get(self, request, *args, **kwargs): self.object = self.get_object() vote_form = OptionFormSet(instance=self.object) @@ -304,9 +316,6 @@ class VoteView(OpenElectionOnly, SuccessMessageMixin, DetailView): for v in vote_form: v.record_vote(self.request.user) - messages.success(self.request, _("Votre vote a bien été enregistré !")) + messages.success(self.request, _("Votre choix a bien été enregistré !")) - return HttpResponseRedirect( - reverse("election.view", args=[self.object.election.pk]) - + f"#q_{self.object.pk}" - ) + return HttpResponseRedirect(self.get_success_url())