Django:对象没有属性';最近出版了';

Django:对象没有属性';最近出版了';,django,django-models,django-tests,Django,Django Models,Django Tests,对于Django来说,我刚刚开始学习第一个教程,现在我正在学习第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(futur

对于Django来说,我刚刚开始学习第一个教程,现在我正在学习第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'...
而在教程页面中,测试中没有显示错误

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

OK
Destroying test database for alias 'default'...
这是我的密码

测试.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)
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
型号.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)
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
来自django.db导入模型的

课堂提问(models.Model):
问题文本=models.CharField(最大长度=200)
发布日期=models.datetime字段(“发布日期”)
定义(自我):
返回self.question\u文本
课程选择(models.Model):
问题=models.ForeignKey(问题,on_delete=models.CASCADE)
choice_text=models.CharField(最大长度=200)
投票数=模型.整数字段(默认值=0)
定义(自我):
返回self.choice\u文本
def最近发布(自我):
now=时区。now()

return now-datetime.timedelta(days=1)您需要将函数移到类中,因为它现在不属于问题类

class Question(models.Model):
    ...


    def was_published_recently(self):
        ...

您需要将函数移到类中,因为它现在不属于问题类

class Question(models.Model):
    ...


    def was_published_recently(self):
        ...

models.py
中添加:

from django.db import models
from django.utils import timezone

models.py
中添加:

from django.db import models
from django.utils import timezone

models.py中
将问题模型替换为以下代码-

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

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
另外,请确保已导入时区-

from django.utils import timezone 

models.py中
将问题模型替换为以下代码-

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

    def __str__(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
另外,请确保已导入时区-

from django.utils import timezone 

退出python shell(quit()或exit())并重新启动它,然后重试代码的最佳方法。然后它将被实现。

退出python shell(quit()或exit())并重新启动它,然后重试代码的最佳方法。然后它将被实现。

只需导入datetime和timezone,然后按您所说的做,谢谢。只需导入datetime和timezone,然后按您所说的做,谢谢。