Django - Деление результата набора запросов на целое число
Я довольно новичок в Django и немного запутался в этом. У меня есть представление, которое показывает сумму десятичного поля (сумма), сгруппированную по имени внешних ключей (accountplan):
def projection(request):
divider = int(date.today().strftime('%d'))
qs = ManagerialRevenue.objects.values('accountplan__name').annotate(Sum('amount'))
return render(request, 'app/pages/planning/projection.html', context={'qs': qs,})
Мне нужно разделить каждое аннотированное поле суммы в переменной qs на переменную делитель. В шаблоне я могу перебирать qs:
{% for item in qs %}
{{ item.accountplan__name }}
{{ item.amount__sum }}
{% endfor %}
Но когда я пытаюсь разделить значения, добавляя эту строку в представлении:
result = qs / divider
И зацикливаем шаблон с:
{% for item in result %}
{{ item.accountplan__name }}
{{ item.amount__sum }}
{% endfor %}
Выдает ошибку неподдерживаемый тип(ы) операнда для /: 'QuerySet' и 'int' ошибка. Я понял ошибку (или, по крайней мере, так думаю), и попытался выполнить цикл в представлении следующим образом:
for result in qs:
result / divider
Но я все еще получаю результат в виде словаря и ту же ошибку, что и выше, за исключением того, что 'dict' и 'int'.
Есть ли способ сделать это? Спасибо!
Для разделения используйте тег шаблона widthratio
# views.py
def projection(request):
divider = int(date.today().strftime("%d"))
qs = ManagerialRevenue.objects.values("accountplan__name").annotate(Sum("amount"))
return render(
request,
"app/pages/planning/projection.html",
context={"qs": qs, "divider": divider},
)
# template.html
{% for item in qs %}
{{ item.accountplan__name }}
{{ item.amount__sum }}
{% widthratio item.amount__sum divider 1 %}{{ item.amount__sum }}
{% endfor %}
Или вы можете даже обновить переменную qs
таким образом, чтобы сохранить результат деления
views.py
def projection(request):
divider = int(date.today().strftime("%d"))
qs = ManagerialRevenue.objects.values("accountplan__name").annotate(Sum("amount"))
qs_updated = [{**item, "div_result": item["amount__sum"] / divider} for item in qs]
return render(
request,
"app/pages/planning/projection.html",
context={"qs": qs_updated},
)
# template.html
{% for item in qs %}
{{ item.accountplan__name }}
{{ item.amount__sum }}
{{ item.div_result }}
{% endfor %}