我找到了链接: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
我应该怎么做别的,使它工作?
(对不起,我的英语)
我找到了链接: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
我应该怎么做别的,使它工作?
(对不起,我的英语)
也许你定义pub_date
为DateField
,但它必须是一个DateTimeField
?你可以在你的模型定义代码中包含问题吗?
是的 - 这是DateTimeField – DJPy 2010-06-07 07:34:17
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')
,这将给你所有的入口与时针对象(在所有年)。
可能更好使用原始的SQL查询一样的:
Whatever.objects.raw("SELECT * FROM table WHERE TIME(pub_date) LIKE '%%08:30%%' ")
的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)和其他类似查询的小时值。
当我这样做,并尝试使用MyModel.objects.filter(date__hour = 8)进行过滤时,django表示它期望一个strnig或缓冲区,就好像date__hour预计为日期时间而不是整数 – 2015-06-10 16:07:24
我不太确定这个补丁是否打算与1.2一起工作。 – 2010-06-06 16:33:10