Вы можете сделать запрос, чтобы получить все релевантные листы за год, используя gte
и lte
django lookup.
Например:
import datetime
leaves = Leave.objects.filter(
leavedatefrom__gte=datetime.date(2019, 1, 1),
leavedateto__lte=datetime.date(2019, 12, 31)
)
А затем обойдите все листья и вычислите дельту дней между ними и сложите ее в другую переменную:
total_days = 0
for leave in leaves:
total_days += (leave.leavedateto - leave.leavedatefrom).days
print total_days
См. Как рассчитать количество дней между двумя указанными датами? для получения более подробной информации и опций для расчета диапазонов дат.
EDIT:
Одна из оптимизаций, которую можно выполнить, если вы не хотите использовать БД на каждой итерации, - это использовать django values_list()
:
leaves = Leave.objects.filter(
leavedatefrom__gte=datetime.date(2019, 1, 1),
leavedateto__lte=datetime.date(2019, 12, 31)
).values_list('leavedatefrom', 'leavedateto')
total_days = 0
for leavedateto, leavedatefrom in leaves:
total_days += (leavedateto - leavedatefrom).days
print total_days