Django:对象没有属性“was_published_recently”

1 django django-models django-tests

Django 新手,我一直在学习第 1 篇教程,现在正在学习第 5 部分,即自动化测试。

按照教程进行到“修复Bug ”步骤后,运行测试时弹出错误,如下:

   Traceback (most recent call last):
   File "D:\Python\Django\ui1\polls\tests.py", line 13, in test_was_published_recently_with_future_question
    self.assertIs(future_question.was_published_recently(), False)
AttributeError: 'Question' object has no attribute 'was_published_recently'

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

而在教程页面中,测试中没有显示错误。

Creating test database for alias 'default'...
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK
Destroying test database for alias 'default'...
Run Code Online (Sandbox Code Playgroud)

这是我的代码。

测试.py

import datetime

from django.utils import timezone
from django.test import TestCase

from .models import Question

class QuestionMethodTests(TestCase):
    def test_was_published_recently_with_future_question(self):
#should return False for questions whose pub_date is in the future.
        time = timezone.now() + datetime.timedelta(days=30)
        future_question = Question(pub_date=time)
        self.assertIs(future_question.was_published_recently(), False)
Run Code Online (Sandbox Code Playgroud)

模型.py

from django.db import models

class Question(models.Model):
    question_text= models.CharField(max_length=200)
    pub_date=models.DateTimeField('date published')
    def __str__(self):
        return self.question_text

class Choice(models.Model):
    question= models.ForeignKey(Question, on_delete=models.CASCADE)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    def __str__(self):
        return self.choice_text

def was_published_recently(self):
    now = timezone.now()
    return now - datetime.timedelta(days=1) <= self.pub_date <= now
Run Code Online (Sandbox Code Playgroud)

Gor*_*ran 5

您需要将函数移到类内,它现在不属于 Question 类。

class Question(models.Model):
    ...


    def was_published_recently(self):
        ...
Run Code Online (Sandbox Code Playgroud)