RuntimeWarning: DateTimeField Initiative.date получило наивный дататайм при активной поддержке часовых поясов
Я пытаюсь отфильтровать набор запросов, чтобы получить все сообщения за этот год.
def thisYearQuerySet(objects):
start_day = datetime.date(datetime.date.today().year, 1, 1)
end_day = datetime.date(datetime.date.today().year, 12, 31)
return objects.filter(date__range=[start_day, end_day])
django стонет о start_day
и end_day
декларация может конфликтовать django.utils.timezone
, я думаю, что это не большая проблема.
Но предупреждение раздражает, любое предложение по его отключению (не отключать предупреждение django) будет оценено по достоинству.
django стонет о том, что объявление start_day и end_day может конфликтовать с django.utils.timezone, я думаю, что это не большая проблема.
.
Это зависит от уровня риска, который вас устраивает. Если не учитывать часовой пояс пользователя, thisYearQuerySet
может вернуть объекты прошлого года или текущего года, когда вы приближаетесь к новому году.
Это происходит потому, что сервер может работать по времени GMT, что означает, что в 2022-01-01 00:00:00T00:00 он начнет возвращать данные с датами 2022 года. Однако американцы, использующие приложение, будут знать, что год 2021 еще 4+ часа назад, и будут ожидать увидеть данные 2021 года до своей полуночи.
Однако, если вы пытаетесь заглушить предупреждение и не заботитесь о вышеописанном сценарии, не используйте функции python datetime для получения today/now. Используйте:
from django.utils import timezone
now = timezone.now()
today = timezone.now().date()