Как я могу сравнить даты в Джанго? - PullRequest
2 голосов
/ 22 марта 2011

У меня есть класс модели 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 ]

5 голосов
/ 22 марта 2011

Вычитание двух 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
2 голосов
/ 22 марта 2011

today должно быть:

today = datetime.date.today()

Вычитание двух объектов даты-времени дает вам временную дельту.

>>> 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...