Как проверить два временных периода на совпадение в django?
Например, у меня есть два временных периода 02:00:00 - 03:00:00, теперь я хочу проверить, что новое входящее время начала и окончания не попадает в этот диапазон.
01:00:00 - 02:00:00 и 03:00:00 - 04:00:00 должны быть приемлемыми.
Вы можете использовать объект Q для выполнения этого запроса.
from django.db.models import Q
overlapping_slots = Slot.objects.filter(
Q(start_time__lt=new_start_time, end_time__gt=new_start_time) |
Q(start_time__lt=new_end_time, end_time__gt=new_end_time)
)
if overlapping_slots.exists():
# invalidate the form here
По сути, вы проверяете, есть ли в БД слоты, где new_start_time находится между начальным и конечным временем этого слота, и где new_end_time находится между начальным и конечным временем этого слота. документация для объектов Q: https://docs.djangoproject.com/en/3.2/topics/db/queries/#complex-lookups-with-q-objects