【问题标题】:Django QuerySet Filter by week_day returning nothingDjango QuerySet 按 week_day 过滤,不返回任何内容
【发布时间】:2018-10-06 18:02:21
【问题描述】:

我目前正在尝试在 Django 2.0 中按星期几过滤我的 QuerySet 结果。
我一辈子都无法让 django week_day 过滤器 datetime__week_day 返回任何结果。

型号

class Session(models.Model):
    def __str__(self):
        return str.join(', ', (str(self.game.name), str(self.datetime_created), str(self.start)))

    game = models.ForeignKey(
        'Game',
        on_delete=models.PROTECT,
        blank=False,
        null=False,
    )

    datetime_created = models.DateTimeField(auto_now_add=True,)
    start = models.DateTimeField(blank=True, null=True,)
    end_time = models.TimeField(blank=True, null=True,)
    competitive = models.BooleanField(default=False,)

过滤

filtered_sessions = Session.objects.filter(
    start__week_day=2,
).exclude(start__isnull=True)

我目前在会话表(MySQL 后端)中有一个条目,其中包含日期时间 2018-04-30 23:51:42.000000,因此我希望这个 QuerySet 包含星期一发生的“会话”。

参考文档,一周从星期日 (1) 到星期六 (7)。
我的设置中有USE_TZTIME_ZONE='UTC'
不管这些设置如何,我也尝试将 start__week_day=2 替换为 0-8 之间的值(包括在内,以防万一)

我的问题是:为什么我正在尝试没有返回任何结果?

如果我遗漏了有助于回答我的问题的内容,请告诉我。
谢谢!

编辑: 此后,我尝试在数据库中运行直接查询 (SELECT * FROM mysite_session WHERE DAYOFWEEK('start') IN (0-8);)
数据库中没有结果。

【问题讨论】:

  • 您的设置中有USE_TZ = True,您使用的是哪个时区?最可能的问题是,当 Django 转换为您的本地时区时,时间戳最终会在星期二。
  • 您好,感谢您的回复。是的,我确实有,它使用的是UTC,但无论如何我已经在工作日过滤器中从 1 到 7 一直尝试,但没有运气。
  • 他上面说了,django 2.0
  • 可能您需要先将其转换为 Date 并需要获取工作日,如下所示,请检查一次。 start__date__week_day=2
  • 不幸的是,没有运气,同样的结果(没有返回)

标签: python django datetime django-queryset


【解决方案1】:

经过几个小时的研究和测试,事实证明我的问题确实是由USE_TZ引起的,但不是直接的。

问题是我没有将时区正确导入 MySQL 数据库。
首先,我没有所需的表格(我在第 60-72 行找到了 here
其次,我没有正确设置我的时区。
我跑了mysql_tz_info_to_sql /usr/share/zoneinfo | mysql -u root
我应该跑到哪里
mysql_tz_info_to_sql /usr/share/zoneinfo/ | mysql -u root mysql

在正确运行该命令并确保我的数据库中确实有表之后,我能够成功执行 Django 过滤器。

感谢所有提供帮助的人,如果没有您的意见,我不会发现问题!

【讨论】:

  • 在 Ubuntu 16.04 上的命令中有一个更正:mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root -p mysql
  • 寻找 3 小时后找到了您的解决方案。这行得通。谢谢老兄。
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
相关资源
最近更新 更多