Django:DateTimeField 收到一个天真的日期时间

Django: DateTimeField received a naive datetime

我正在努力创建一个视图,该视图将只显示截止日期未过的帖子。完成这个我添加了以下我的 views.py 文件:

current_posts = Posts.objects.filter(post_name=post, deadline__range=[date.today(), "2999-12-31"]).order_by('deadline')

这样我只能显示截止日期范围在今天和 2999 年 12 月 31 日之间的帖子。但是我收到以下错误,并且根本没有显示任何帖子:

RuntimeWarning: DateTimeField OfferedFunds.deadline received a naive datetime (2999-12-31 00:00:00) while time zone support is active.
  RuntimeWarning)

过去发布的解决方案让我尝试了以下也不起作用的方法:

timezone.now()
current_posts = Posts.objects.filter(post_name=post, deadline__range=[timezone.now(), "2999-12-31"]).order_by('deadline')

如果我没有输入:timezone.now(),而是输入了一个实际日期,如“2015-10-10”,那么它会起作用,但这违背了目的。关于如何解决这个问题的任何想法?

我今天在工作中 运行 遇到了这个问题!基本上 deadline__range=[date.today(), '2999-10-10'] 行在第一个槽中有一个 UTC 感知时间,在第二个槽中有一个 UTC 未知时间。让我引导您找到帮助我 How to make an unaware datetime timezone aware in python 的 post。有一些纯 python 解决方案和一些 django 解决方案,但我认为您会在那里找到您需要的!

您可以 deadline__gte=timezone.now()

而不是检查范围

此页面有更多信息:https://docs.djangoproject.com/en/stable/ref/models/querysets/#gte

在您的 settings.py 中设置 USE_TZ = False,这样应该可以修复警告。就我而言,我想在全球范围内使用本地日期时间,所以这就是我最终所做的。干杯!