Django按月和y筛选

2024-10-05 14:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试按月份和年份筛选日期时间字段。不知什么原因,当输入月份和年份时,我会返回一个空集合。

型号:

class SomePost(model.Models):
    timestamp = models.DateTimeField(auto_now_add=True)

查询:

p = SomePost.objects.filter(timestamp__year=2014, timestamp__month=1)

我想这和这个月有关,但我看不出我做错了什么。

编辑

好的,所以我将模型datetimefield转换为datefield,查询成功了。

生成的sql如下:

SELECT 
`a_post`.`id`, 
`a_post`.`title`, 
`a_post`.`slug`, 
`a_post`.`text`, 
`a_post`.`timestamp`, 
`a_post`.`published` FROM `a_post` 
WHERE EXTRACT(MONTH FROM `a_post`.`timestamp`) = 2
ORDER BY `a_post`.`timestamp` DESC;

但当我将它转换回datetimefield时,sql是:

SELECT 
`a_post`.`id`, 
`a_post`.`title`,
`a_post`.`slug`, 
`a_post`.`text`, 
`a_post`.`timestamp`,
 `a_post`.`published` FROM `a_post` 
WHERE EXTRACT(MONTH FROM CONVERT_TZ(`a_post`.`timestamp`, 'UTC', UTC)) = 1 
ORDER BY `a_post`.`timestamp` DESC

似乎是对流引起了这个问题。如果我要在查询返回结果时删除convert_tz函数。

有什么想法吗?


Tags: textfromidsqltitlewherepostselect
2条回答

我在MySQL Ver 14.14 Distrib 5.6.33也有同样的问题。

这是由空时区表引起的。我通过填充它们来修复它:

shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

阅读MySQL CONVERT_TZ()上的答案很有用。

我也有同样的问题,这对我很有帮助,我希望这对你有帮助。

Tested on Django-1.11.5

 p = SomePost.objects.filter(timestamp__year='2014').filter(timestamp__month='1')

更多信息可用here

相关问题 更多 >