【发布时间】: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_TZ,TIME_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