Django queryset:启用USE_TZ时,无法按当前星期进行过滤

时间:2018-12-17 10:08:21

标签: python mysql django

我正在将Django 2.1与USE_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 问题就解决了!

2 个答案:

答案 0 :(得分:1)

如果您的数据库是不是 Postgres,则可能会感兴趣

Other databases中的https://docs.djangoproject.com/en/2.1/topics/i18n/timezones/#database部分。

  

其他后端存储的日期时间没有时区信息。如果你   从USE_TZ = False切换到USE_TZ = True,您必须转换您的   从本地时间到UTC的数据-如果您的本地时间是不确定的   时间有夏令时。

答案 1 :(得分:1)

我终于找到了问题所在,基本上MySQL time_zone表是空的,需要填写!

运行以下命令后:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

问题消失了!