2010-06-06 58 views
5

我找到了鏈接:http://code.djangoproject.com/attachment/ticket/8424/time_filters.diff,並通過添加您可以在其中看到的內容更改我的django 1.2文件。
但是現在,當我試圖寫Entry.objects.filter(pub_date__hour = X) - 結果是以下錯誤:Django按小時篩選

Field has invalid lookup: hour

我應該怎麼做別的,使它工作?

(對不起,我的英語)

+0

我不太確定這個補丁是否打算與1.2一起工作。 – 2010-06-06 16:33:10

回答

0

也許你定義pub_dateDateField,但它必須是一個DateTimeField?你可以在你的模型定義代碼中包含問題嗎?

+0

是的 - 這是DateTimeField – DJPy 2010-06-07 07:34:17

4
Entry.objects.filter(pub_date__hour = x) 

不支持自django 1.2 - 僅年,月,日,week_day。

使用這樣的事情:

Entry.objects.filter(pub_date__regex = '08:00') 

Entry.objects.filter(pub_date__contains = '08:00') 

,這將給你所有的入口與時針對象(在所有年)。

1

可能更好使用原始的SQL查詢一樣的:

Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ") 
2

的Django 1.7增加了對自定義查找和轉換提供支持。一個小時變換實現上的PostgreSQL如下:

class HourExtract(models.Transform): 
    lookup_name = 'hour' 
    output_type = models.IntegerField() 

    def as_sql(self, compiler, connection): 
     lhs_sql, lhs_params = compiler.compile(self.lhs) 
     return "EXTRACT(hour FROM %s)" % lhs_sql, lhs_params 

models.DateTimeField.register_lookup(HourExtract) 

現在你可以做.filter(pub_date__hour__lte = x)和其他類似查詢的小時值。

+0

當我這樣做,並嘗試使用MyModel.objects.filter(date__hour = 8)進行過濾時,django表示它期望一個strnig或緩衝區,就好像date__hour預計爲日期時間而不是整數 – 2015-06-10 16:07:24