Неподдерживаемые типы операндов для -: 'datetime.datetime' и 'datetime.date

В модели у меня есть свойство

accepted_at = models.DateTimeField(blank=True, null=True)

Когда я сохраню его

from datetime import datetime

Entry.objects.last().accepted_at = datetime.now()

Я пытаюсь узнать, принимается ли до 30 минут

from datetime import datetime


if (datetime.now() - Entry.objects.last().accepted_at).total_seconds() > 1800:
    return True

Но я получаю следующую ошибку

unsupported operand type(s) for -: 'datetime.datetime' and 'datetime.date

Может ли кто-нибудь мне помочь?

Как гласит ошибка, вы не можете вычесть datetime.datetime из datetime.date. Я бы сначала отладил двойную проверку того, что Entry.objects.last().accepted_at на самом деле является типом datetime.datetime. Это можно сделать с помощью простого:

print( type(Entry.objects.last().accepted_at) == datetime )

или просто проверить тип:

print( type(Entry.objects.last().accepted_at) )

Если это не равно True, то вы знаете, что это не datetime.

Также для проверки того, что принятое время меньше чем 30 минут, необходимо немного изменить код. Убедитесь, что прошедшее время меньше или равно (<=) минутам до истечения срока действия:

from datetime import datetime

minutesBeforeExpiration = 30
secondsPerMin = 60

if (datetime.now() - Entry.objects.last().accepted_at).total_seconds() <= (minutesBeforeExpiration * secondsPerMin):
    return True
Вернуться на верх