Как агрегировать, если

#django #templates #sum #aggregate

#django #шаблоны #сумма #агрегировать

Вопрос:

В шаблоне django я мог бы получить доступ к цене с помощью {% for x in done %} , а затем получить доступ к продукту, который является внешним ключом к таблице о продуктах. Итак, я получаю доступ к цене продукта следующим образом {{x.productt.omzet}} .

Мой вопрос: как я могу их суммировать?

В views.py Я успешно использовал агрегатную функцию для суммирования значений из дочерней таблицы; однако в этом случае мне нужно агрегировать значения из большой дочерней таблицы. Мне не удалось сделать это в цикле for в views.py .

 def factuur(request, id):
factuur = Factuur.objects.get(id=id)
leerling = Leerling.objects.get(name=factuur.leerling)
jezelf = Leerling.objects.get(id=2)
paid = BankTransactions.objects.filter(actor=factuur.leerling)
total_paid = paid.aggregate(Sum('amount'))
done = Product.objects.filter(leerling=factuur.leerling)
total_done = done.aggregate(Sum('productt'))

if leerling.status == 4:
    bedrag1 = "done - paid = factuur"
elif leerling.status == 3:
    bedrag1 = "factuur is any"
else:
    bedrag1 = "factuur is niet van toepassing"
notice = bedrag1

context = {'factuur': factuur,
           'leerling': leerling,
           'jezelf': jezelf,
           'paid': paid,
           'done': done,
           'total_paid': total_paid,
           'total_done': total_done,
           'notice': notice,
           }
return render(request, 'rozendale/factuur.html', context)
  

шаблон:

 <div class="row">
        <div class="col-lg-6">
            <table>
                <tr>
                    <th>Datum</th>
                    <th>Service</th>
                    <th>Bedrag</th>
                </tr>
                {% for x in done %}
                <tr>
                    <td>
                        <a href="/item/{{x.id}}">{{x.date|date:"SHORT_DATE_FORMAT"}}</a>
                    </td>
                    <td>
                        <a href="/product/{{x.productt.id}}">{{x.productt.name}}</a>
                    </td>
                    <td>
                        {{x.productt.omzet}}
                    </td>
                </tr>
               {% endfor %}
                <tr>
                    <th colspan="2">Totaal:</th>
                    <td>
                    {{total_done}}
                    </td>
                </tr>
            </table>
        </div>
        <div class="col-lg-6">
            <table>
                <tr>
                    <th>Datum</th>
                    <th>Factuur</th>
                    <th>Betaald</th>
                </tr>
                {% for x in paid %}
                <tr>
                    <td>
                        <a href="/item/{{x.id}}">{{x.date|date:"SHORT_DATE_FORMAT"}}</a>
                    </td>
                    <td>
                        <a href="/factuur/{{x.factuur.id}}">{{x.factuur}}</a>
                    </td>
                    <td>
                        {{x.amount}}
                    </td>
                </tr>
               {% endfor %}
                <tr>
                    <th colspan="2">Totaal:</th>
                    <td>{{total_paid.amount__sum}}</td>
                </tr>
            </table>
        </div>
  

Ответ №1:

views.py

 def factuur(request, id):
factuur = Factuur.objects.get(id=id)
leerling = Leerling.objects.get(name=factuur.leerling)
yourself= Leerling.objects.get(id=2)

paid = BankTransactions.objects.filter(actor=factuur.leerling)
total_paid = []
for pay in paid:
    total_paid  = [(pay.amount)]
total_paid = sum(total_paid)

done = Product.objects.filter(leerling=factuur.leerling)
total_done = []
for les in done:
    dit = ProductName.objects.get(id=les.productt_id)
    total_done  = [(dit.omzet)]
total_done = sum(total_done)

openstaand = total_done - total_paid
#notice = factuur.amount * factuur.productt.omzet

if leerling.status == 4:
    notice = openstaand
elif leerling.status == 3:
    notice = factuur.amount * factuur.productt.omzet
else:
    notice = "factuur is niet van toepassing"

context = {'factuur': factuur,
           'leerling': leerling,
           'yourself': yourself,
           'paid': paid,
           'done': done,
           'openstaand': openstaand,
           'total_paid': total_paid,
           'total_done': total_done,
           'notice': notice,
           }
return render(request, 'test/factuur.html', context)
  

Factuur = счет-фактура. Это подробное представление счета-фактуры ( object..get(id=id) ). Этот счет принадлежит одному клиенту, но многим продуктам и многим транзакциям. В этом коде я отфильтровал все из них, которые принадлежат этому клиенту. Я сделал это с помощью цикла for. Затем в цикле for я перебираю отфильтрованные продукты и транзакции клиента. На каждой итерации я использую метод GET, чтобы получить цену продукта. Но эта цена указана в другой таблице: таблица продуктов (подробности). Итак, на самом деле, эта цена продукта взята из таблицы внуков.

Комментарии:

1. Я отредактировал ответ, поместив всю функцию из views.py . Задача состояла в том, чтобы суммировать цены на продукты для каждого клиента, потому что эти цены были в отдельной таблице.