使用相对小时范围过滤查询

Filter query with relative hour range

我正在尝试编写查询以提供从过去 24 小时开始但不超过过去 25 小时的所有条目。

因此,如果执行查询的日期和时间是 06.17.2016 15:00,我想查找开始日期在 06.16.2016 15:0006.16.2016 15:59

之间的每个条目

尝试使用 __range,但似乎无法使用数小时。甚至可以使用 .filter() 来做到这一点吗?

这是我的代码:

class Entry(models.Model):
    startdate = models.DateTimeField()

-

start = timezone.now().date() - relativedelta(hours=+24)
end = timezone.now().date() - relativedelta(hours=+25)

list = Entry.objects.filter(startdate__gte=start, startdate__lte=end)

编辑:

list 给出一个空的查询集。

编辑 2:

似乎是 relativedelta

的问题

start = timezone.now().date() - relativedelta(hours=+24, seconds=+1) 给我 datetime.datetime(2016, 6, 16, 0, 59, 59)

end = timezone.now().date() - relativedelta(hours=+25, seconds=+1) 给我 datetime.datetime(2016, 6, 15, 22, 59, 59)

我想,如果我想让它工作,就需要解决这个问题。

您计算的范围有误。你的开始是 24 小时前,结束是在 25 小时前,你应该在 25 小时前开始,在 24 小时前结束。

start = timezone.now().date() - relativedelta(hours=+25)
end = timezone.now().date() - relativedelta(hours=+24)
list = Entry.objects.filter(startdate__gte=start, startdate__lte=end)

你的代码中其他有问题的地方,你不应该使用timezone.now().date()来计算时间范围,因为你的字段是DateTimeField并且你处理的是小时,所以date 显然不够精细(即使它仍然可以使用 date(),但概念是错误的):

start = timezone.now() - relativedelta(hours=+25)
end = timezone.now() - relativedelta(hours=+24)

另外,请总是在问题正文中清楚地说明你的问题,就像你的查询集是空的一样,这样别人更容易判断你有什么问题。