有没有办法让 Django 接受带有 USE_TZ=True 的原始日期时间,或者抑制警告?

Is there a way for Django to accept naive datetimes with USE_TZ=True, or to suppress warnings?

我们公司一直是 Django 的长期用户 -- 超过 10 年。我们目前是 运行 Django 1.11.26。多年来,我们处理了很多与日期时间相关的问题,但事实证明我们当前的问题具有挑战性。

我们的目标是做到以下几点:

如许多 Stack Overflow 问题中所述,Django 将发出警告,其中日期时间字段值设置为原始日期时间: RuntimeWarning:DateTimeField 收到一个天真的日期时间...而时区支持处于活动状态。

我们认为我们存储原始日期时间的用例是合理的。虽然对于我们几乎所有的日期时间字段,使用 UTC 是有意义的,但对于某些类型的每日汇总,我们希望存储一个 naive/agnostic 日期时间,指示本地时区中一天的开始日期时间(不同对象的多个时区).通过使用简单的日期时间,我们能够使用与日期时间相关的过滤器。因此,如果我们要汇总给定日期时间的某些类型的能源汇总,我们可以通过以各种方式过滤该原始本地日期时间来找到任何时区(洛杉矶、芝加哥、波士顿)建筑物的相同本地日期时间的汇总。

以下是我们尝试过的一些方法:

我们现在唯一的解决方法是告诉 Django 这个 loca/naive 日期时间字段是 UTC——因此在保存时不会进行时间转换,也不会发出运行时警告,因为它是一个感知日期时间。但它最终是错误的。这些不是 UTC 日期时间。它们是故意天真、非规范化的日期时间。我们担心这会影响到我们,尤其是当 Django 发展其时区支持时。

对于这个问题,还有没有我们没有考虑过的其他可能的解决方案?预先感谢您考虑这个问题。

要过滤或抑制警告,您可以使用 warnings.filterwarnings:

您可以尝试将类似这样的内容添加到 settings.py 以过滤警告:

from warnings import filterwarnings
filterwarnings('ignore', message=r'.*received a naive datetime')

您可能需要 fiddle 调用 filterwarnings 以根据需要抑制警告。