Фильтр по дате с разнесенными данными

У меня есть модель в django, которая содержит дату начала и окончания финансового года и значение объема спроса.

    start_date = models.DateField(null=True)
    end_date = models.DateField(null=True)
    new_demand = models.PositiveIntegerField(default=0)

Я хотел бы отфильтровать эти данные по заданному диапазону дат, который может не совпадать с диапазоном дат в данных, взяв долю спроса из каждой точки данных, которая может попасть куда-то в диапазон дат фильтра. Я предполагаю, что мне нужно определить, попадает ли точка данных за край фильтра, и разделить спрос на количество дней внутри фильтра? Но у меня возникают трудности при попытке написать это. Любая помощь будет принята с благодарностью! :)

Если вам не нужно выполнять вычисления внутри базы данных, вы можете отфильтровать перекрывающиеся диапазоны дат (здесь показана хорошая картина того, когда диапазоны перекрываются) и выполнить вычисления в python при итерации по набору запросов:

for obj in MyModel.objects.filter(start_date__lte=end, end_date__gte=start):
    overlap = min(end, obj.end_date) - max(start, start_date)
    proportion = (obj.end_date - obj.start_date) / overlap
    print(obj, "demand in overlapping range:", obj.new_demand * proportion)
Вернуться на верх