From 6e3368304ad33ad518d0f5feb8c5ca0d1cea905d Mon Sep 17 00:00:00 2001 From: Josh Flatt Date: Sat, 22 Nov 2025 20:54:34 -0600 Subject: [PATCH] added /vote/ form - same as detail --- polls/views.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/polls/views.py b/polls/views.py index 6cb7911..d5dc34d 100644 --- a/polls/views.py +++ b/polls/views.py @@ -1,8 +1,9 @@ +from django.db.models import F +from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render -from django.http import HttpResponse -from django.template import loader +from django.urls import reverse -from .models import Question +from .models import Choice, Question # Create your views here. @@ -24,4 +25,23 @@ def results(request, question_id): def vote(request, question_id): - return HttpResponse("You're voting on question %s." % question_id) + question = get_object_or_404(Question, pk=question_id) + try: + selected_choice = question.choice_set.get(pk=request.POST["choice"]) # type: ignore + except (KeyError, Choice.DoesNotExist): + # Redisplay the question voting form. + return render( + request, + "polls/detail.html", + { + "question": question, + "error_message": "You didn't select a choice.", + }, + ) + else: + selected_choice.votes = F("votes") + 1 + selected_choice.save() + # Always return an HttpResponseRedirect after successfully dealing + # with POST data. This prevents data from being posted twice if a + # user hits the Back button. + return HttpResponseRedirect(reverse("polls:results", args=(question.id,))) # type: ignore