Creating test database for alias 'default'....F........======================================================================FAIL: test_detail_view_with_a_past_question (polls.tests.QuestionIndexDetailTests)----------------------------------------------------------------------Traceback (most recent call last): File "/home/dufort/code/django-tutorials/mysite/polls/tests.py", line 122, in test_detail_view_with_a_past_question self.assertContains(response, past_question.question_text) File "/tmp/bash-venv/8918/lib/python2.7/site-packages/django/test/testcases.py", line 382, in assertContains self.assertTrue(real_count != 0, msg_prefix + "Couldn't find %s in response" % text_repr)AssertionError: Couldn't find 'Past Question.' in response
----------------------------------------------------------------------Ran 10 tests in 0.045s
FAILED (failures=1)Destroying test database for alias 'default'...
import datetime
from django.utils import timezonefrom django.test import TestCasefrom django.urls import reverse
from .models import Question
...
def create_question(question_text, days): """ Creates a question with the given 'question_text' and published the given number of 'days'offset to now (negative for question published in the past, positive for questions that have yet to be published. """ time = timezone.now() + datetime.timedelta(days=days) return Question.objects.create(question_text=question_text, pub_date=time)
...
class QuestionIndexDetailTests(TestCase):
...
def test_detail_view_with_a_past_question(self): """ The detail view of a question with a pub_date in the past should display the question's text. """ past_question = create_question(question_text='Past Question.', days=-5) url = reverse('polls:detail', args=(past_question.id,)) response = self.client.get(url) self.assertContains(response, past_question.question_text)
from django.shortcuts import render, get_object_or_404from django.http import HttpResponseRedirectfrom django.urls import reversefrom django.views import genericfrom django.utils import timezone
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 published questions (not including those set to be published in the future.) """ return Question.objects.filter( pub_date__lte=timezone.now() ).order_by('-pub_date')[:5]
class DetailView(generic.DetailView): model = Question template_name = 'polls/detail.html'
def get_queryset(self): """ Excludes any questions that aren't published yet. """ return Question.objects.filter(pub_date__lte=timezone.now())
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 += 1 selected_choice.save() return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))