added /vote/ form - same as detail

This commit is contained in:
Josh Flatt 2025-11-22 20:54:34 -06:00
parent 51c5b522b2
commit 6e3368304a

View File

@ -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.shortcuts import get_object_or_404, render
from django.http import HttpResponse from django.urls import reverse
from django.template import loader
from .models import Question from .models import Choice, Question
# Create your views here. # Create your views here.
@ -24,4 +25,23 @@ def results(request, question_id):
def vote(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