Извлечение данных из определенного интервала лет в 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
.