Временной интервал кверисета 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 that are later thandatetime.now() - timedelta(hours=12)
end_at
s that are later thandatetime.now() + timedelta(hours=12)
Так что вам нужно использовать обратное (lt
) для end_at
, чтобы сделать фильтр, который охватывает диапазон в пределах :
data = data.filter(start_at__gt=start_at, end_at__lt=end_at)
Это означает, что объекты должны соответствовать следующим критериям:
start_at
s that are later thandatetime.now() - timedelta(hours=12)
end_at
s that are earlier thandatetime.now() + timedelta(hours=12)