【问题标题】:Django: DateTimeField received a naive datetimeDjango:DateTimeField 收到一个天真的日期时间
【发布时间】:2015-10-28 03:32:28
【问题描述】:

我正在创建一个仅显示截止日期尚未过去的帖子的视图。为此,我添加了以下我的 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”,那么会起作用,但这违背了目的。关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: python django django-views python-datetime django-timezone


    【解决方案1】:

    您可以使用deadline__gte=timezone.now()而不是检查范围

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2013-09-08
          • 2014-01-29
          • 2014-03-28
          • 2019-08-06
          • 2018-02-15
          • 1970-01-01
          • 2016-08-19
          • 2021-01-27
          相关资源
          最近更新 更多