Django按小时过滤

时间:2010-06-06 15:29:04

标签: python django

我找到了链接:http://code.djangoproject.com/attachment/ticket/8424/time_filters.diff并通过添加你可以在那里看到的内容来更改我的django 1.2文件。
但现在,当我正在尝试编写Entry.objects.filter(pub_date__hour = x)时 - 结果出现以下错误:

  

字段查找无效:​​小时

我应该怎么做才能让它发挥作用?

(对不起我的英文)

4 个答案:

答案 0 :(得分:4)

Entry.objects.filter(pub_date__hour = x)
django 1.2不支持

- 仅限年,月,日,周日。

使用类似的东西:

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

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

将为您提供所有带有小时(全年)的Entry对象。

答案 1 :(得分: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)和其他类似的查询。

答案 2 :(得分:1)

可能更好地使用原始SQL查询,如:

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

答案 3 :(得分:0)

也许您将pub_date定义为DateField,但它必须是DateTimeField?你能在问题中包含你的模型定义代码吗?