Django:对象没有属性';最近出版了';
对于Django来说,我刚刚开始学习第一个教程,现在我正在学习第5部分,即自动化测试 在遵循教程直到步骤“修复Bug”之后,运行测试时会弹出一个错误,如下所示: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
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,然后按您所说的做,谢谢。