过滤在特定时间之前或之后添加的 django 对象

Posted

技术标签:

【中文标题】过滤在特定时间之前或之后添加的 django 对象【英文标题】:Filter objects in django which are added before or after a specific Hour of time 【发布时间】:2016-05-10 00:33:38 【问题描述】:

我在我的应用程序中使用 django-1.7。我有一个有两个 DateTimeFields 的模型。喜欢

class Task(models.Model):
    start_time = models.DateTimeField(null=True, blank=True)
    finish_time = models.DateTimeField(null=True, blank=True)

我想用小时 gtelte 过滤字段 start_timeend_time 以便我可以获得包含任务对象的查询集,这些任务对象必须在特定时间开始并结束于一个特定的时间。我尝试过的

Task.objects.filter(start_time__hour__gte=2)
Task.objects.filter(end_time__hour__lte=2)

但是这个查询给了我错误

    FieldError: Unsupported lookup 'hour' for DateTimeField or join on the field not permitted.

我也尝试过 queryset.raw,它提供了正确的值,但在与 django-filters 包一起使用时会出错。

def start_time_filter(self, queryset, value):
    if value.isdigit():
        return queryset.raw("select * from app_task WHERE TIME(`start_time`) >= '0';".format(value))

    return queryset.none()

将得到帮助

【问题讨论】:

【参考方案1】:

对此我不确定,但通过阅读文档听起来hour__gte=2 语法仅在 django 1.9 中添加。以前版本的 django 只允许精确查找,例如 hour=2。您可以考虑升级 django 并重试。

关于原始查询错误,我不知道你得到了什么错误,但 django doc 也有相应的语法。您可能会查找确切的 sql 语句,因为数据库的每个 sql 语句都是不同的。这可能会解决您不想升级 django 的问题。

django doc about hour lookup in django 1.7

django doc about hour lookup in django 1.9

【讨论】:

是的,此功能仅在 1.9 中添加。 试图在不升级到 django-1.9 的情况下获得一些解决方案

以上是关于过滤在特定时间之前或之后添加的 django 对象的主要内容,如果未能解决你的问题,请参考以下文章

在特定的其他列之前或之后添加 sql 表列 - 通过 Laravel 4.1 中的迁移

如何在 django rest 框架中仅使用特定变体对象将项目添加到愿望清单?

Django添加Q过滤器以查询相关对象存在时,条件查询

在Django查询中获取当前选择之前和之后的记录

Web API过滤器

Django如何添加2个或更多过滤器