Фильтр набора запросов по году между двумя полями даты
В моей модели есть поля start_date и end_date. Пользователь должен иметь возможность фильтровать записи, выбирая значение года, так что записи, охватывающие несколько лет, должны быть показаны, если выбранный год включен.
Например: Выбранный год: 2019
| start_date | end_date |
|---|---|
| 2017-03-12 | 2021-09-03 |
| 2019-12-12 | 2020-06-05 |
Я могу выполнить этот запрос с помощью необработанного SQL следующим образом:
SELECT * FROM `orders` WHERE '2019' BETWEEN YEAR(`start_date`) AND YEAR(`end_date`);
Как я могу сделать это, используя Django ORM и избегая сырых SQL запросов? Потому что я уже использую ORM в нескольких фильтрах и остался только этот бит.
в файле views.py:
from django.db.models import Q
YourModel.objects.filter(
Q(start_date__year=2019) |
Q(end_date__year=2019)
)
Попробуйте это:
YourModel.objects.filter(
start_date__year__lte=2019,
end_date__year__gte=2019,
)