Суммирование значений для каждой строки в таблице, динамически генерируемой из контекстных переменных django
В моем шаблоне есть следующая таблица:
<tbody>
{% for user in users %}
<tr>
<td>{{ user.title }} </td>
{% for fruit in fruits %}
{{ sum|add:user|get_attr:fruit }}
<td>{{ user|get_attr:fruit }} </td>
{% endfor %}
{% for vegetable in vegetables %}
{{ sum|add:user|get_attr:vegetable }}
<td>{{ user|get_attr:vegetable }} </td>
{% endfor %}
<td>{{ sum }}</td>
{% endfor %}
</tbody>
"фрукты" и "овощи" - это списки, переданные в качестве контекста из представления. Следующий пользовательский фильтр позволяет мне итерацией по этим спискам извлекать целочисленные значения из модели "user". Столбцы таблицы генерируются таким же образом, поэтому этот фильтр должен быть в таблице:
@register.filter
def get_attr(obj, attr):
return getattr(obj, attr)
Переменная "sum" передается как контекст из представления со значением 0. Я пытаюсь заставить ее суммировать все соответствующие переменные строки в шаблоне, но она остается равной 0. Насколько я могу судить, есть три пути решения этой проблемы:
- Solve this in the template (as I'm trying now)
- Generate the value in the view (although I have no idea how I would go about this)
- Add some JS to solve it (would prefer to avoid this).
Как я должен решить эту проблему?
Решил эту проблему на задней стороне, создав словарь:
views.py
sum = {}
for user in users:
identity = user.pk
score = 0
all_food = fruits + vegetables
for food in all_food:
score += getattr(user,food)
sum[identity] = score
Теперь к суммированному значению можно получить доступ в шаблоне, используя другой пользовательский тег шаблона:
@register.filter
def get_value(dictionary, key):
return dictionary.get(key)
Добавление в шаблон:
{{ sum|get_value:user.pk }}