我试图按月和年筛选日期时间字段。由于某些未知原因,当输入月份和年份时,我会返回一个空集。

模型:

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


好像是conver_tz引起了问题。如果我要删除convert_tz函数,则查询将返回结果。

对这里发生的事情有什么想法吗?

最佳答案

我遇到了同样的问题,这对我来说很有效,我希望它对您有用。


  在Django-1.11.5上测试


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


提供更多信息here

08-25 05:32