Django - Как мне вычислить сумму поля в наборе запросов - PullRequest
0 голосов
/ 06 мая 2020

Использование DJANGO У меня есть простая модель с полями Customer_ID, Date, Product, Total_price. Я хочу отображать их в группах по дате, чтобы все цены на эту дату отображались сгруппированными, например

28 April 2020<br> Crisps £1.20<br> Cheese £1.40

29 April 2020<br> Crisps £1.80<br> Cheese £3.40

Как показать общую цену под каждой датой (например, 2,60 фунта стерлингов, 5,20 фунта стерлингов) Вот то, что я пробовал в моем html, все хорошо отображается в группах, но последний тег для расчета суммы не работает:

{% regroup results by Date as new_list %}
    {% for Date, results2 in new_list %}
        <div class="track-row">
            <span class="track-item track1">{{ Date }}</span>
               {% for data in results2 %}
                   <div>
                        <span class="track-item track3">{{ data.Stock }}</span>
                        <span class="track-item track5">£{{ data.Sell_price }}+vat</span>
                        <span class="track-item track4">{{ data.Quantity }}</span>
                        <span class="track-item track5">£{{ data.Total_price }}+vat</span>
                    </div>
               {% endfor %}
               <h6 class="title4">£{{ data.Total_price__sum }} + vat</h6>
        </div>
    {% endfor %}

В моем views.py я создал набор запросов со всеми итогами:

total = Quotes.objects.values('Customer_ID', 'Date').filter(Customer_ID=customer_id).\
    annotate(total_price=Sum('Total_price')).order_by('-Date')

, и он отлично работает и дает мне правильные итоги, но как мне показать эти результаты вместе с моими html.

Я пробовал:

       {% for data2 in total %}
           <h6 class="title4">£{{ data2.total_price }} + vat</h6>
       {% endfor %}

, который отлично работает, но просто показывает все итоги. Могу ли я выбрать каждую запись из приведенного выше набора запросов и поместить ее рядом с моим соответствующим списком, или есть другой способ показать сумму моих цены в каждой группе Любая помощь очень ценится

1 Ответ

0 голосов
/ 06 мая 2020

Один из способов - реализовать простой настраиваемый фильтр, который принимает список в качестве параметра и возвращает сумму.

образец макета

myapp/
    __init__.py
    models.py
    templatetags/
        __init__.py
        myapp_extras.py
    views.py

myapp_extras.py

from django import template

register = template.Library()

@register.filter(is_safe=True)
def sum_total_price(value):
    sum = 0
    for v in value:
        sum += v.Total_price
    return sum

Затем в шаблоне сначала вы загружаете фильтр,

{% load myapp_extras %}

и, наконец, просто используете его,

<h6 class="title4">£{{ result2|sum_total_price }} + vat</h6>

Django Документы - настраиваемые теги и фильтры шаблонов

...