使用相对小时范围过滤查询
Filter query with relative hour range
我正在尝试编写查询以提供从过去 24 小时开始但不超过过去 25 小时的所有条目。
因此,如果执行查询的日期和时间是 06.17.2016 15:00
,我想查找开始日期在 06.16.2016 15:00
和 06.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)
另外,请总是在问题正文中清楚地说明你的问题,就像你的查询集是空的一样,这样别人更容易判断你有什么问题。
我正在尝试编写查询以提供从过去 24 小时开始但不超过过去 25 小时的所有条目。
因此,如果执行查询的日期和时间是 06.17.2016 15:00
,我想查找开始日期在 06.16.2016 15:00
和 06.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)
另外,请总是在问题正文中清楚地说明你的问题,就像你的查询集是空的一样,这样别人更容易判断你有什么问题。