Фильтр Python Django позволяет избежать перекрытия между диапазонами дат
Сегодня утром у меня немного не хватает логики.
Я получаю от пользователя 2 объекта datetime (диапазон), start_time и end_time.
Идея состоит в том, чтобы возвращать значение exists, если есть перекрытие между входным диапазоном и существующим временем расписания.
Я попробовал следующее, но я далеко не в ладах с логикой.
if Schedule.objects.filter(start_date__gte=ts_start, end_date__lte=ts_start).filter(start_date__gte=ts_end, end_date__lte=ts_end ).exists():
Любые предложения будут высоко оценены.
Спасибо!
У вас почти получилось. Чтобы найти все диапазоны времени, которые пересекаются, нужно просто отфильтровать те, где нижняя граница данных меньше верхней границы поиска, а верхняя граница данных больше нижней границы поиска
overlap = Schedule.objects.filter(
start_date__lte=ts_end,
end_date__gte=ts_start
)
Two ranges [b1, e1] and [b2, be] do not overlap if b1> e2, or e1<b2. We can negate this expression to know when two intervals overlap: b1≤e2, and e1≥b2.
Это означает, что мы можем фильтровать с помощью:
Schedule.objects.filter(start_date__lte=ts_end, end_date__gte=ts_start)