Python Django:API中的自定义方法调用返回false
我是Django的初学者,正在做这个教程:但是我被他们教你如何使用API的部分卡住了(向下滚动直到你到达玩API的部分): 以下是完整的源代码(models.py): 起初我认为函数之间的空格可能不够,所以我尝试修复它,当这不起作用时,我复制并粘贴了确切的代码,有人能告诉我哪里出了问题以及如何修复吗?提前谢谢 Python版本:3.5Python Django:API中的自定义方法调用返回false,python,django,python-3.x,Python,Django,Python 3.x,我是Django的初学者,正在做这个教程:但是我被他们教你如何使用API的部分卡住了(向下滚动直到你到达玩API的部分): 以下是完整的源代码(models.py): 起初我认为函数之间的空格可能不够,所以我尝试修复它,当这不起作用时,我复制并粘贴了确切的代码,有人能告诉我哪里出了问题以及如何修复吗?提前谢谢 Python版本:3.5 操作系统:Linux Mint肉桂我不太明白你有什么问题 是不是《q.was_published_recently》()真的应该返回true?还是你面临着某种错误
操作系统:Linux Mint肉桂我不太明白你有什么问题 是不是《q.was_published_recently》()真的应该返回
true
?还是你面临着某种错误
尝试在return语句之前打印出
发布日期
,以验证该日期实际上是什么。我建议您尝试打印问题
实例的字段
>>> q = Question.objects.get(pk=1)
>>> q.question_text
'here will be the text of your question instance'
>>> q.pub_date
'here will be the date and time of your question instance'
>>> q.was_published_recently()
False
通过这种方式,您可以看到
问题
实例设置的日期和时间,这应该可以弄清楚您的方法最近发布的原因
返回真
或假
是的,它应该返回真
,我也尝试使用打印()
打印发布日期
,但它不起作用,你能在Django的API中使用print()函数吗?我与Django合作已经有一段时间了,但是尝试print(self.pub_date)也不起作用,这是输出:NameError:name'self'未定义
Hmm好的,我想我们可以尝试将was_published_最近发布的
函数更新为只返回self.pub_日期
,同样的结果,它返回了false
这里没有任何错误。该方法返回False,可能是因为它是False。我不明白为什么你会认为间距与任何事情都有关系。当我键入q.pub_date
时,这是输出:datetime.datetime(2018,4,13,19,37,44,22617,tzinfo=)
你能告诉我2018
之后的数字是什么吗?我对这件事还不太熟悉。那差不多是8天前的事了。如果发布日期与当前时间之间的差值小于一天(请参见所述方法中的逻辑),则最近发布的方法将只返回True
。如果将方法中的部分datetime.timedelta(days=1)
更改为更大的值(可能days=10
)然后该方法应该返回True。这只是为了确认该方法是否按预期工作。现在我想起来了,有一段时间我没能继续学习教程几天,这是我应该在settings.py
中解决的问题还是什么问题?没有什么需要解决的,因为没有什么问题。一切按计划进行。如果您今天创建一个新问题,它的方法最近发布了将返回True
。
from django.db import models
import datetime
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 __str__(self):
return 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, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
>>> q = Question.objects.get(pk=1)
>>> q.question_text
'here will be the text of your question instance'
>>> q.pub_date
'here will be the date and time of your question instance'
>>> q.was_published_recently()
False