2014-12-02 102 views
0

我正在关注Django官方教程编写你的第一个Django应用程序,第1部分。最后对在那里,我必须给下面的命令:按照Django官方文档说明的问题

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) 

我猜测可能b我在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

对我来说,timedelta看起来很好..随着timedelta你从现在开始减去一天。我想问题是''''self.pub_date'''比一天更老,这就是为什么它正确输出'''False'''。请在控制台上输入'''q.pub_date''',看看有什么价值。 – chsymann 2014-12-02 16:22:57

+0

好吧,“q.pub_date”命令正常工作:“datetime.datetime(2014,11,29,15,40,19,tzinfo = )”这意味着,它指的是从今天起两天前。这是个问题吗? – ni8mr 2014-12-02 16:24:53

回答

1

根据方法名称,我会说在这种情况下False是正确的返回值。如果问题少于一天,该方法应返回True。在你的情况下,pub_date是一个比一天更早的日期,所以它不是“最近发布”的,所以该方法返回False。如果您将日期更改为q.pub_date = timezone.now(),然后使用q.save()保存,则q.was_published_recently()应该在一天内返回True。

0

最后,我发现这个问题。它的定义是was_published_recently()方法。它应该是< =而不是> =

这里是重新定义的方法:

def was_published_recently(self): 
    return self.pub_date <= timezone.now()-datetime.timedelta(days=1) 

此前,该方法被测试,如果PUB_DATE比这是错误的昨天大于或等于。

现在,它正在测试pub_date是否小于或等于昨天,这是正确的。

+1

aehm,不..根据方法名称,我会说你的改变是不正确的。如果''Question'''小于一天,该方法应该返回True。如果您的更改比一天更旧,它会返回True。前面的代码是正确的,只是你的pub_date是一个比一天更老的日期,所以它不是“最近发布”的,所以该方法返回False。如果你现在用'''q.pub_date = timezone.now()'''把日期改为''',然后用'''q.save()'''''''''''''''''应该在一天内返回True。 – chsymann 2014-12-02 17:47:17

+0

谢谢。我的概念现在更清晰了。你应该评论它。比我能接受你的答案。 – ni8mr 2014-12-02 19:38:27