python - Django 查询集:启用 USE_TZ 时无法按当前周过滤
问题描述
我正在使用 Django 2.1USE_TZ = True
和TIME_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 问题就消失了!
解决方案
如果您的数据库不是Postgres Other databases
,那么https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#database上的部分可能会很有趣。
其他后端存储没有时区信息的日期时间。如果从 USE_TZ = False 切换到 USE_TZ = True,则必须将数据从本地时间转换为 UTC——如果您的本地时间有 DST,则这不是确定性的。
推荐阅读
- php - 如何制作 PHP $row ahref?
- vim - 管理 vim syntastic gutter line
- java - java - 将 JSONObject 转换为 HashMap
- passport.js - ValidationError:用户验证失败,转换为字符串的值失败
- scala - Spark:按键分组,分区映射
- ibm-cloud - Watson Assistant 和 Watson Discovery 上的 2 因素身份验证?
- javascript - Laravel 按排序返回数据
- intellij-idea - IntelliJ:Ant 报告一个错误。没有迹象表明哪里或什么失败了
- c# - 简化代码 C# switch 语句
- javascript - 在运行时在 THREE.JS 和 GLTF 中导入另一个纹理