首页 > 解决方案 > Django 查询集:启用 USE_TZ 时无法按当前周过滤

问题描述

我正在使用 Django 2.1USE_TZ = TrueTIME_ZONE = 'UTC'.

这是我的模型 DateTimeField:

create_date = models.DateTimeField(_('date created'), null=True, auto_now_add=True)

我正在尝试根据周数获取当前一周的结果。我尝试了以下方法:

today = timezone.now()
current_week_num = today.isocalendar()[1]
week_results = MyModel.objects.filter(create_date__week=current_week_num).count()

当数据库中有记录时,这总是返回 0。如果我设置它工作正常USE_TZ = False。我正在使用 MySql 数据库。

任何想法?

更新:

问题在于 MySQL time_zone 表为空!我不得不运行:mysql_tzinfo_to_sql /usr/share/zoneinfo 问题就消失了!

标签: pythonmysqldjango

解决方案


如果您的数据库不是Postgres Other databases,那么https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#database上的部分可能会很有趣。

其他后端存储没有时区信息的日期时间。如果从 USE_TZ = False 切换到 USE_TZ = True,则必须将数据从本地时间转换为 UTC——如果您的本地时间有 DST,则这不是确定性的。


推荐阅读