我试图按月和年筛选日期时间字段。由于某些未知原因,当输入月份和年份时,我会返回一个空集。
模型:
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