RuntimeWarning:DateTimeField Model.date 在时区支持处于活动状态时接收到原始日期时间
RuntimeWarning: DateTimeField Model.date received a naive datetime while time zone support is active
我正在尝试过滤查询集以获取今年的所有帖子。
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.utils
中获取一年的第一天和最后一天
全面警告
RuntimeWarning: DateTimeField Model.date received a naive datetime (2021-01-01 00:00:00) while time zone support is active.
RuntimeWarning: DateTimeField Model.date received a naive datetime (2021-12-31 00:00:00) while time zone support is active.
django moans about start_day and end_day declaration may conflicts django.utils.timezone, I think it is not a big deal.
这取决于您可以接受的风险级别。如果不考虑用户的时区,thisYearQuerySet
可能会 return 去年或今年临近新年时的对象。
这是因为服务器可能 运行 在 GMT 时间,这意味着在 2022-01-01 00:00:00T00:00,它会开始 returning 带有年份日期的数据2022 年。但是,任何使用该应用程序的美国人都会在 4 个多小时内知道这一年是 2021 年,并希望在他们自己的午夜之前看到 2021 年的数据。
但是,如果您试图消除警告并且不关心上述情况,请不要在获取 today/now 时使用 python 日期时间函数。使用:
from django.utils import timezone
now = timezone.now()
today = timezone.now().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.utils
全面警告
RuntimeWarning: DateTimeField Model.date received a naive datetime (2021-01-01 00:00:00) while time zone support is active.
RuntimeWarning: DateTimeField Model.date received a naive datetime (2021-12-31 00:00:00) while time zone support is active.
django moans about start_day and end_day declaration may conflicts django.utils.timezone, I think it is not a big deal.
这取决于您可以接受的风险级别。如果不考虑用户的时区,thisYearQuerySet
可能会 return 去年或今年临近新年时的对象。
这是因为服务器可能 运行 在 GMT 时间,这意味着在 2022-01-01 00:00:00T00:00,它会开始 returning 带有年份日期的数据2022 年。但是,任何使用该应用程序的美国人都会在 4 个多小时内知道这一年是 2021 年,并希望在他们自己的午夜之前看到 2021 年的数据。
但是,如果您试图消除警告并且不关心上述情况,请不要在获取 today/now 时使用 python 日期时间函数。使用:
from django.utils import timezone
now = timezone.now()
today = timezone.now().date()