我正在尝试运行一个查询,以获取从A小时到B小时的所有记录(例如:23-00小时范围内保存的所有记录。)
我尝试使用date__range,当然它没有帮助
这里的风景
def issue_report(request, pk):
try:
issue = Issue.objects.get(id = pk)
start = issue.date_time
end = issue.date_time + timedelta(minutes=30)
if issue.merge == '2':
pass
else:
issue = Issue.objects.filter(date__range = (start, end), customer = issue.customer.id, merge = '2').order_by('date_time').first()
a = issue.date
x = int(a.strftime('%Y'))
y = int(a.strftime('%m'))
z = int(a.strftime('%d'))
hijri = Gregorian(x,y,z).to_hijri()
dbs = [Issue]
transactions = sorted(
[m
for db in dbs
for m in db.objects.filter(customer = issue.customer.id, date__range = (start, end), merge= '1', ).order_by('date_time')],
key=attrgetter('date_time')
)
for tx in transactions.copy():
if tx.date_time < issue.date_time:
transactions.remove(tx)
transactions.insert(0, issue)
return render(request, 'issue/report.html', context={'issue':issue, 'transactions':transactions ,'hijri':hijri})
except AttributeError:
return HttpResponse("<h1>Change Transaction type to ``Don't Merge``.</h1>")
2条答案
按热度按时间x6492ojm1#
要根据特定的小时范围筛选记录,可以使用日期/时间对象的hour属性,并将其与gte和lt查找组合在一起。例如,要获取从晚上11点到午夜的所有记录,您可以执行以下操作:
这将为您提供my_datetime_field的时间在11 PM(23:00:00)和午夜(00:00:00)之间的所有记录。请注意,我们使用lt表示结束时间,因为从技术上讲,午夜是新一天的开始。
在您的代码中,您可以修改事务查询以基于小时范围进行筛选,如下所示:
enter image description here
这将为您提供在问题数据时间后30分钟内发生的所有交易。注意,我还简化了列表解析,因为它只包含一个模型类。
我希望这对你有帮助!
46scxncf2#
对于简单的范围,Django过滤器可以原生处理。有关小时和分钟过滤器,请参阅文档
从晚上11点到午夜,你可以简单地使用
如果要获取基于另一项中变量值的范围(包括超过一小时的时间段),则可能需要为此目的设置一个单独的时间字段,如this answer中所述