Запрос на Python/Django для проверки совпадения дат

Я пытаюсь настроить валидацию на API, построенном с помощью Python/Django. Я использую сериализатор и хотел бы сделать фильтр запроса к данным поста, чтобы убедиться, что 2 поля даты не пересекаются. Например: Мой пост содержит:

"valid_start": "2021-09-01", "valid_end": "2021-09-15"

Я хочу с помощью object.filter проверить, есть ли в моей базе данных записи с перекрывающимися датами: Я хочу выдать ошибку валидации, если запрос обнаружит что-либо из следующего

"valid_start": "2021-09-01", "valid_end": "2021-09-15"

"valid_start": "2021-09-02", "valid_end": "2021-09-15"

"valid_start": "2021-09-03", "valid_end": "2021-09-10"

"valid_start": "2021-08-28", "valid_end": "2021-09-20"

Я пробовал функцию __range, функции gte/lte, ни одна из них не делает того, чего я пытаюсь достичь. Спасибо!

Let us first determine when two date ranges do not overlap. These do not overlap if end1 < start2 or end2 < start1. The opposite of this condition is end1 ≥ start2 and end2 ≥ start1, we thus can query with:

MyModel.objects.filter(
    valid_end__gte=valid_start,
    valid_start__lte=valid_end
)

Где valid_start и valid_end - начальная и конечная даты, которые вы хотите вставить. Если такая запись существует, то вы пытаетесь вставить запись с хотя бы некоторым перекрытием. Если такая запись не найдена путем фильтрации, то она не будет перекрываться с новой создаваемой записью.

Вернуться на верх