我有一个带有类变量due_date
的Django模型类:
due_date = models.DateField()
如果对象是根据今天的日期到期,我想在Django管理员中输出。
我的功能如下:
def is_due_today(self):
dd = self.due_date
today = datetime.date.now
return dd - today > 0
但我的输出是:
(None)
我做错了什么?
答案 0 :(得分:5)
在Python中减去两个datetime
对象会为您提供一个timedelta
对象,您无法将其与整数进行比较。但是,您可以从中获取类似total_seconds()
的内容,以查看它是否为非零。
>>> now = datetime.datetime.now()
# wait 3 seconds
>>> now2 = datetime.datetime.now()
>>> td = now2 - now
>>> td.total_seconds()
3.266
所以在你的情况下,代码看起来像(未经测试):
def is_due_today(self):
dd = self.due_date
delta = dd - datetime.date.today()
return delta.total_seconds() > 0
答案 1 :(得分:2)
today
应该是:
today = datetime.date.today()
减去两个日期时间日期对象会为您提供timedelta。
>>> a - datetime.date.today()
datetime.timedelta(0)
>>> a = datetime.date.today()
>>> a - a
datetime.timedelta(0)
>>> a - a == 0
False
>>>
>>> a - a == datetime.timedelta(0)
True
另外,如果您正在检查今天是否有问题,则可能需要更改条件语句:
today - today isn't going to be > 0
如果您要检查过期时间:
return self.due_date < datetime.date.today()
今天检查到期日期:
return self.due_date == datetime.date.today()