Как сравнить даты в Django?
У меня есть класс модели Django с переменной класса due_date:
due_date = models.DateField()
Я хочу вывести в Администраторе Django, если объект должен или не основан на сегодняшней дате.
Моя функция такова:
def is_due_today(self):
dd = self.due_date
today = datetime.date.now
return dd - today > 0
Но мой вывод таков:
(None)
Что я делаю не так?
2 ответов:
Вычитание двух
datetimeобъектов в Python дает вам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
todayдолжно быть:today = datetime.date.today()Вычитание двух объектов datetime date дает 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()
Comments