Как я могу реализовать промежуточный итог в шаблоне Django? - PullRequest
4 голосов
/ 13 октября 2010

У меня есть представление, которое возвращает мое резюме продаж, сгруппированное по sales_date, например:

[{'sale_date':datetime.datetime(2010,10,5,0,0), 'salesum':2, 'item':1},
 {'sale_date':datetime.datetime(2010,10,5,0,0), 'salesum':10,'item':3},
 {'sale_date':datetime.datetime(2010,10,6,0,0), 'salesum':1, 'item':1}]

Я сделал группировку внутри шаблона и объединил ее с html ul и теги li , чтобы дать мне хороший эффект группировки на основе sale_date

Моя группировка шаблонов основана на этом коде:

{% regroup salecursor by sale_date|date:"j/m/Y" as salelist %}

и

{{ saleitem.grouper }

Результат:

05/10/2010

  • item1 Имя - 2
  • item2 Имя - 10

06/10/2010

  • Item1 Name - 1

Как получить промежуточный итог для каждой группы, т.е.иметь в общей сложности 12, а вторая группа - 1 и иметь что-то с таким эффектом:

05/10 / 2010

  • item1 Название - 2
  • item2 Имя - 10

    Всего 12

06/10/2010

  • Имя элемента 1 - 1

    Всего 1

Спасибо Гат

1 Ответ

10 голосов
/ 13 октября 2010

Что?Разве вы не знаете о фильтре running_total?

Шучу.Такого нет, но написать его довольно легко.Это немного неэффективно, так как он снова перемещает сгруппированный список к sum значениям salesum.

# app_filters.py
@register.filter
def running_total(sales_list):
    return sum(d.get('salesum') for d in sales_list)

И вы можете использовать его в своем шаблоне:

{% regroup salecursor by sale_date|date:"j/m/Y" as salelist %}

<ul>
{% for sales in salelist %}
    <li>{{ sales.grouper }}
    <ul>
        {% for item in sales.list %}
        <li>{{ item.item }} - {{ item.salesum }}</li>
        {% endfor %}

        <li>Total: <b>{{ sales.list|running_total }}</b></li>
    </ul>
    </li>
{% endfor %}
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...