我正在关注Django官方教程编写您的第一个Django应用程序,第1部分。最后,我必须给出以下命令:
q.was_published_recently()
输出应为:
True
相反,我有:
False
这是我的models.py文件:
import datetime
from django.db import models
from django.utils import timezone
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return u'%s' % (self.question_text)
def was_published_recently(self):
return self.pub_date >= timezone.now()-datetime.timedelta(days=1)
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
我猜可能是我在 timedelta 功能时遇到问题。我不确定。
N.B。:文件的确切步骤是:
>>> from polls.models import Question, Choice
>>> Question.objects.all()
[<Question: What's up?>]
>>> Question.objects.filter(id=1)
[<Question: What's up?>]
>>> Question.objects.filter(question_text__startswith='What')
[<Question: What's up?>]
>>> from django.utils import timezone
>>> current_year = timezone.now().year
>>> Question.objects.get(pub_date__year=current_year)
<Question: What's up?>
>>> Question.objects.get(id=2)
Traceback (most recent call last):
...
DoesNotExist: Question matching query does not exist.
>>> Question.objects.get(pk=1)
<Question: What's up?>
>>> q = Question.objects.get(pk=1)
>>> q.was_published_recently()
True
答案 0 :(得分:1)
根据方法名称,我会说False
在这种情况下是正确的返回值。如果问题不是一天,则该方法应返回True
。在您的情况下,pub_date是一个超过一天的日期,因此它不是“最近发布的”,因此该方法返回False
。如果使用q.pub_date = timezone.now()将日期更改为现在,然后使用q.save()保存,则q.was_published_recently()应该在一天内返回True。
答案 1 :(得分:0)
最后,我发现了这个问题。它是在 was_published_recently()方法的定义中。它应该是&lt; = 而不是&gt; = 。
这是重新定义的方法:
def was_published_recently(self):
return self.pub_date <= timezone.now()-datetime.timedelta(days=1)
以前,该方法测试的是pub_date是否大于或等于昨天的错误。
现在,它正在测试pub_date是否小于或等于昨天,这是正确的。