2014-01-22 237 views
1

我想按月份和年份篩選日期時間字段。由於一些未知的原因,當進入月份和年份時,我返回一個空集。Django按月份和年份篩選

型號:

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函數。

關於這裏發生了什麼的任何想法?

+0

你肯定有記錄在數據庫中爲年/月的那個組合? –

+0

是我每天都在januaray 2014 – user204088

+1

看看http://stackoverflow.com/questions/1317714/how-can-i-filter-a-date-of-a-datetimefield-in-django - 它應該幫助你: –

回答

0

我在MySQL Ver 14.14 Distrib 5.6.33有同樣的問題。

這是由空時區表引起的。我已經通過填充他們固定它:

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

MySQL CONVERT_TZ()閱讀答案這是非常有用。

0

我有同樣的問題,這對我來說很成功,我希望它能爲你工作。

上的Django 1.11.5測試

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

更多信息,請here