python - Django 查询集时间间隔
问题描述
我需要按时间间隔在我的数据库中进行对象选择
目前我找到了一种仅从一天中选择对象而不是从间隔中选择对象的方法:
data.filter(end_at__day=datetime.datetime.now().day)
我在 django __gte 文档上看到了这个,这意味着从一个日期到今天,但我没能让它工作
我试过这个:
if request.method == 'POST':
form = DashboardSettingsForm(data=request.POST)
if form.is_valid():
dis_planned = form.cleaned_data.get('display_planned')
dis_currently = form.cleaned_data.get('display_currently')
dis_ended = form.cleaned_data.get('display_ended')
end_at = start_at = datetime.now()
if dis_ended:
end_at = datetime.now() - timedelta(hours=12)
if dis_planned:
start_at = datetime.now() + timedelta(hours=12)
data = data.filter(start_at__gt=start_at, end_at__gt=end_at)
print(f"interval: start{start_at} end{end_at}")
解决方案
data = data.filter(start_at__gt=start_at, end_at__gt=end_at)
上述行表示对象需要满足:
start_at
s晚于datetime.now() - timedelta(hours=12)
end_at
s晚于datetime.now() + timedelta(hours=12)
因此,您需要使用 reverse ( lt
) for end_at
,使其成为覆盖范围内的过滤器:
data = data.filter(start_at__gt=start_at, end_at__lt=end_at)
这实质上意味着对象需要满足以下标准:
start_at
s晚于datetime.now() - timedelta(hours=12)
end_at
s早于datetime.now() + timedelta(hours=12)
推荐阅读
- arrays - 在 Fortran 中创建包含其他声明变量的数组
- python - 递归函数有问题(Python)
- git - 从本地签出的单个文件中查找提交哈希
- c# - 如何根据另一个表的另一行中的条件选择表中的一行?
- node.js - 带有 NATS 的 Nodejs Express API?
- java - 无法在云 Firestore 的编辑文本中设置文本?
- xml - xsl 列大小和对齐方式
- azure - 使用 Microsoft Graph Explorer 编辑自定义 Azure B2C 属性
- javascript - 如何在 Vue 中检索 mp3 或 wav 音频文件的持续时间
- flutter - 即使在相应的小部件被移除后,Flutter async 方法也会继续运行