Извлечение данных из определенного интервала лет в djnago

Как дела? Мне нужна помощь, пожалуйста. Я работаю в Django и мне нужно сделать запрос, который должен возвращать значение в определенном интервале лет. Например, если интервал года равен 2, то он должен возвращать данные за 10 лет, если дата применения была 2020, то он должен возвращать данные в 2020, 2022, 2024, как это, и если дата применения была 2023 и интервал был 3, то он также должен возвращать данные аналогично. Код приведен ниже, я пробовал:

diff = get_factors_of(i.year_num)
componant3 = ComponentInfo.objects.filter(component__category__water_scheme = scheme,maintenance_interval__in = diff_year, apply_date__lte = i.end_date, interval_unit='Year').aggregate(labour_cost = Sum(F('labour_cost')*F('component_numbers'),output_field=FloatField()),\
                    material_cost = Sum(F('material_cost')*F('component_numbers'),output_field=FloatField()), \
                    replacement_cost = Sum(F('replacement_cost')*F('component_numbers'),output_field=FloatField()),\
                    maintenance_cost = Sum(F('maintenance_cost')*F('component_numbers'),output_field=FloatField()),)

а метод возврата diff - это :

def get_factors_of(num):
    """Return factor of integer number"""
    factor_list = [1]
    for i in range(1, num + 1):
        if num == 1:
            factor_list = [x for x in range(1,15)]
        elif num % i == 1:
            factor_list.append(i)
    return factor_list

этот метод должен возвращать определенный диапазон интервалов

Как я понимаю вашу проблему, вам нужно предоставить больше переменных в функцию. Вам нужен 1. начальный год, 2. интервал, 3. конечный год. Иначе не удастся правильно посчитать при любых обстоятельствах.

def get_years(starting_year, interval, end_year):
    yield starting_year  # this depends if you want starting list or not
    for year in range(starting_year, end_year + 1, interval):  # +1 means that end_year may be included
        yield year

Можно также использовать list и return, но yield идеально подходит для этой работы. Если range достаточно, то он может быть еще короче:

def get_years(starting_year, interval, end_year):
    return range(starting_year, end_year + 1, interval)

Третье целое число в функции range - это в основном то, что вам нужно - какой размер шага должна обрабатывать функция range.

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