我想过滤当前月份数据。我试过这个。
this_month = datetime.datetime.now().month
products = Product.objects.filter(date_added__month=this_month)
但是,这仅适用于USE_TZ = False
。如果我改为USE_TZ = True
。我的过滤查询不起作用。
模型
date_added = models.DateTimeField(auto_now=True)
答案 0 :(得分:3)
这是一个非常古老的问题,但我认为我的答案可以帮助人们搜索它。
首先,当USE_TZ = True时,我们应始终使用django.utils.timezone.now()
代替datetime.datetime.now()
。 (ref)
Django文档says:
当USE_TZ为True时,datetime字段将转换为当前时间 过滤前的区域。这需要时区定义 数据库中。
它还允许instruction将时区定义安装到数据库:
SQLite:install
pytz
- 转换实际上是在Python中执行的。PostgreSQL:没有要求(见时区)。
Oracle:没有要求(请参阅选择时区文件)。
MySQL:安装
pytz
并使用mysql_tzinfo_to_sql
加载时区表。
在我的情况下:mysql和Mac Os,以下命令解决问题:
sudo mysql_tzinfo_to_sql /usr/share/zoneinfo/ | mysql -u root mysql
现在即使<datetime>__month
USE_TZ = True
过滤器
如果您需要进一步说明,请发表评论。