#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 . Задача состояла в том, чтобы суммировать цены на продукты для каждого клиента, потому что эти цены были в отдельной таблице.