Фильтр 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)
Вернуться на верх