Django教程中调用自定义方法was_published_recently()返回False求助
解决Django教程中
was_published_recently()返回False的问题 嘿,我刚帮好几个Django新手搞定过这个问题,咱们来一步步捋清楚哈!
首先,这个问题大概率是你的was_published_recently()方法逻辑写得不对——毕竟教程里这个方法需要同时满足两个核心条件:
- 问题的发布时间在最近24小时以内
- 发布时间不能晚于当前时间(总不能把还没发布的未来问题算成“最近发布”吧😅)
先看正确的方法实现
你需要把models.py里的was_published_recently()改成这样:
def was_published_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now
为什么你的代码会返回False?
我给你列两种最常见的情况:
- 情况1:方法逻辑缺了一半
很多初学者刚开始只写了return self.pub_date >= now - datetime.timedelta(days=1),没加<= now的判断。如果你的测试Question的pub_date设成了未来时间(比如随手写成明天),那这个不完整的逻辑会返回True,但正确的逻辑会排除这种情况返回False;如果你的pub_date是超过24小时以前的,那不管哪种逻辑都会返回False,这时候你得检查测试数据的发布时间是不是符合要求。 - 情况2:时区用错了
如果你用了datetime.now()而不是timezone.now(),就会导致时区不匹配——毕竟Django默认是用时区感知时间的,datetime.now()是本地时间,和pub_date的时区时间对比就会出错,结果自然不对。
快速排查步骤
你可以在Django shell里敲这两行命令,先搞清楚时间情况:
>>> q.pub_date # 看看这个问题的发布时间 >>> timezone.now() # 看看当前的时区时间
对比这两个时间,是不是满足“在最近24小时内,且pub_date不晚于当前时间”。如果时间没问题,那肯定是方法逻辑写错了,把上面的正确代码替换进去就行。
内容的提问来源于stack exchange,提问作者BrigantiumXIX
相关产品推荐
相关产品推荐

