Запрос Django возвращает несколько строк суммы, я хочу отобразить только одну строку
В настоящее время код написан так: у меня есть модель под названием Finances. У меня есть агрегат, настроенный так, что он суммирует все строки. Я пытаюсь отобразить итог строк, но когда я это делаю, отображается строка для каждой записи базы данных.
Я понимаю, что я захватываю все с .all()
в viewpayout = Finances.objects.all()
в views.py
, но я не уверен, как это должно быть написано, чтобы отобразить только один ряд.
Как вывести только одну строку, которая суммирует все строки для столбца? Любая помощь будет высоко оценена!
Ниже приведен мой код:
views.py
def finances(request):
viewpayout = Finances.objects.all()
updatepayout = UpdatePayout()
updatewithdraw = UpdateWithdraw()
updatecash = UpdateCash()
if request.method == "POST":
if 'add_payout' in request.POST:
updatepayout = UpdatePayout(request.POST)
if updatepayout.is_valid():
post = updatepayout.save(commit=False)
post.save()
return redirect("/finances")
else:
updatepayout = None
if 'bank_withdraw' in request.POST:
updatewithdraw = UpdateWithdraw(request.POST)
if updatewithdraw.is_valid():
post = updatewithdraw.save(commit=False)
post.save()
return redirect("/finances")
else:
updatewithdraw = None
if 'add_cash' in request.POST:
updatecash = UpdateCash(request.POST)
if updatecash.is_valid():
post = updatecash.save(commit=False)
post.save()
return redirect("/finances")
else:
updatecash = None
return render(request, 'portal/finances.html', {"updatepayout": updatepayout, "updatewithdraw": updatewithdraw, "updatecash": updatecash, "viewpayout": viewpayout})
model.py
class Finances(models.Model):
payout = models.DecimalField(null=True, max_digits=5, decimal_places=2, blank=True)
withdraw = models.DecimalField(null=True, max_digits=5, decimal_places=2, blank=True)
cash = models.DecimalField(null=True, max_digits=5, decimal_places=2, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateField(auto_now=True)
def __str__(self):
return self.payout + "\n" + self.withdraw + "\n" + self.cash
@property
def Calculate_bank(self):
totalpayout = Finances.objects.all().aggregate(Sum('payout'))['payout__sum'] or 0.00
totalwithdraw = Finances.objects.all().aggregate(Sum('withdraw'))['withdraw__sum'] or 0.00
totalbank = totalpayout - totalwithdraw
return totalbank
@property
def Calculate_cash(self):
totalwithdraw = Finances.objects.all().aggregate(Sum('withdraw'))['withdraw__sum'] or 0.00
totalcash = Finances.objects.all().aggregate(Sum('cash'))['cash__sum'] or 0.00
totalbank = totalwithdraw - totalcash
return totalbank
finances.html
<li class="list-group-item active" aria-current="true">Finances</li>
{% for finances in viewpayout %}
<span class="list-group-item">Cash Available In Bank: <strong>{{ finances.Calculate_bank }}</strong></span>
{% endfor %}
{% for finances in viewpayout %}
<span class="list-group-item">Cash Available On Hand: <strong>{{ finances.Calculate_cash }}</strong></span>
{% endfor %}
</ul>
Вот что выводится
Я знаю, что в базе данных у меня 9 записей, но как я могу отобразить только одну строку?