我试着写一个查询,给我过去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给出一个空的查询集。
似乎是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)
如果我想让它起作用,我需要解决这个问题。
答案 0 :(得分:2)
你在计算错误的范围。你的开始时间是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)
此外,请始终在问题正文中清楚地说明您的问题,就像您有空的查询集一样,它会让其他人更容易判断您有什么问题。