Как сравнить даты в 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)


Что я делаю не так?

764   2  

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

    Ничего не найдено.