Я хочу сравнить две даты в django views py

Я хочу сравнить две даты, чтобы вернуть что-то. Я пытаюсь сделать это уже долгое время. Итак, что я хочу:

У меня есть переменная current_date = date.today, теперь я хочу сравнить current_date с другой переменной поля даты. Я попробовал этот код :

current_date = date.today()
# I am getting this another date from a html input type date
another_date = request.POST.get("date")
if current_date > another_date:
return True
else:
return False

Но я получаю ошибку

'<' not supported between instances of 'datetime.date' and 'str'

Как можно решить эту проблему?

Потому что вы сравниваете строку с объектом datetime.date. Например, сравнивая

23 > "hello world" 

Попробуйте преобразовать строку, полученную из предыдущего метода. Следуйте за другим обсуждением

Это:

another_date = request.POST.get("date")

дает вам дату в строковом формате, например, "2022-06-16", а datetime.date дает datetime.date(2022, 06, 16). Так сравнивать нельзя, нужно преобразовать один тип в тип другого (или наоборот).

Я предлагаю:

current_date = date.today().strftime("%Y-%m-%d")
another_date = request.POST.get("date")

Я предполагаю, что 'date' выглядит как year-month-day.

Поля даты из формы дают строковое значение, которое форматируется в YY-MM-DD. Этот формат, который является строкой str, не может быть сопоставлен с объектом datetime. Следовательно, причина получения ошибки, которую вы получили:

'<' не поддерживается между экземплярами 'datetime.date' и 'str'

Вы можете создать многократно используемую функцию для сравнения дат, например:

def dates_equal(d1, d2):
     if d1 == d2:
          return True
     else:
          return False

Затем где-то в вашем коде вы можете вызвать его как...

current_date = date.today()

# Getting the string version of the date object
current_date = current_date.strftime("%Y-%m-%d")

# I am getting this another date from a html input type date
another_date = request.POST.get("date")

# Calling the date comparing method here...
if dates_equal(current_date, another_date):
     # do something here...
else:
     # do something else...
Вернуться на верх