Django过滤当前月份数据

时间:2014-04-17 16:42:23

标签: python django

我想过滤当前月份数据。我试过这个。

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)

1 个答案:

答案 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过滤器

如果您需要进一步说明,请发表评论。

修改

Jerzyk yesterday

的建议中添加了有关django.utils.timezone的信息