2010-06-06 52 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