Datetime получил наивное время даты, в то время как я уточнил до часового пояса

Я работаю над проектом Django. Вот мой код :

today = datetime.datetime.now()
currentperiod = Day.objects.get(enddate__gte=today.date(),
                                               startdate__lte=today.date())

И я получил это сообщение :

RuntimeWarning: DateTimeField Day.startdate received a naive datetime (2021-10-04 00:00:00) while time zone support is active.
  warnings.warn("DateTimeField %s.%s received a naive datetime "

Так что я попробовал :

today = datetime.datetime.now()
today = pytz.timezone("Europe/Paris").localize(today, is_dst=None)
            currentperiod = Period.objects.get(enddate__gte=today.date(),
                                               startdate__lte=today.date())

Но это не работает, тогда как я использовал pytz, я предполагаю, что это происходит из today.date(), но я не знаю, как действовать дальше ...

Можете ли вы мне помочь?

Большое спасибо!

A date не содержит информации о часовом поясе, поэтому локализация не работает. Что вы можете сделать, так это усечь today и затем добавить это в качестве фильтрации:

today = datetime.datetime.now()
today = pytz.timezone("Europe/Paris").localize(today, is_dst=None)
today = today.replace(hour=0, minute=0, second=0, microsecond=0)

currentperiod = Period.objects.get(
    startdate__lte=today,
    enddate__gte=today
)

Если вы хотите проверить enddate к концу дня, то вы можете работать с:

from datetime import timedelta

today = datetime.datetime.now()
today = pytz.timezone("Europe/Paris").localize(today, is_dst=None)
today = today.replace(hour=0, minute=0, second=0, microsecond=0)

currentperiod = Period.objects.get(
    startdate__lte=today,
    enddate__gte=today + timedelta(days=1, microseconds=-1)
)
Вернуться на верх