1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from django.db.models import F
- from django.http import HttpResponseRedirect
- from django.shortcuts import get_object_or_404, render
- from django.urls import reverse
- from django.views import generic
- from .models import Choice, Question
- # Create your views here.
- class IndexView(generic.ListView):
- template_name = "polls/index.html"
- context_object_name = "latest_question_list"
- def get_queryset(self):
- """Return the last five poblished questions."""
- return Question.objects.order_by("-pub_date")[:5]
- class DetailView(generic.DetailView):
- model = Question
- template_name = "polls/detail.html"
- class ResultsView(generic.DetailView):
- model = Question
- template_name = "polls/results.html"
- def vote(request, question_id):
- question = get_object_or_404(Question, pk=question_id)
- try:
- selected_choice = question.choice_set.get(pk=request.POST["choice"])
- except (KeyError, Choice.DoesNotExist):
- 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,)))
|