Как суммировать значения всех столбцов таблицы на сайте django?

Я очень новичок в программировании. Я хочу просуммировать весь столбец payment_amount. Я не знаю, какой код я должен использовать для суммирования всего столбца и сохранения его на домашнем сервере. Я пытался создать функцию, но она не сработала. Могу ли я использовать несколько функций на одной странице или мне придется писать все разные функции в одном def function()? Я буду очень благодарен за вашу помощь.

HTML часть:Я

<h1>Hellow</h1>

{% extends 'base.html' %}

{% block content %}

Payment Completed


<table border="1">
  <tr>
    <th>Name</th>
    <th>Mobile</th>
    <th>Payment</th>
  </tr>
  {% for payment in payments %}
    <tr><td>{{ payment.payee_name }}</td><td>{{ payment.phone_number }}</td><td>{{ payment.payment_amount }}</td></tr>
  {% endfor %}
  {% for totalpayment in totalpayments  %}
     <tr>
       <td>{{ Payment.totaldonation }}</td>
     </tr>
  {% endfor %}
</table>


{% endblock %}

admin.py part:

from django.contrib import admin
from .models import ToDo, Payment
class PaymentAdmin(admin.ModelAdmin):
    list_display = ('payee_name', 'phone_number', 'payment_amount')

admin.site.register(Payment, PaymentAdmin)

**forms.py part:**

from django.forms import ModelForm
from .models import ToDo, Payment

class PaymentForm(ModelForm):
    class Meta:
        model = Payment
        fields = ['payee_name', 'phone_number', 'payment_amount']

models.py part:

from django.db import models
from django.contrib.auth.models import User
from django import forms

class Payment(models.Model):
    payee_name = models.CharField(max_length=50)
    phone_number = models.CharField(max_length=14)
    payment_amount = models.IntegerField()

    

    def __str__(self):
        return self.name

views.py part:

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth.models import User
from django.db import IntegrityError
from django.contrib.auth import login, logout, authenticate
from .forms import ToDoForm, PaymentForm
from .models import ToDo, Payment
from django.utils import timezone
from django.contrib.auth.decorators import login_required
from django.db.models import Sum

@login_required
def payment(request):
    if request.method == "GET":
        return render(request, 'builderpage/payment.html', {'form':PaymentForm()})

    else:
         try:
             form = PaymentForm(request.POST)
             newpayment = form.save(commit=False)
             newpayment.user = request.user
             newpayment.save()
             return redirect('completedpayment')
         except ValueError:
             return render(request, 'builderpage/payment.html', {'form':PaymentForm(),'error':'Bad Data Pressed In'})

@login_required
def completedpayment(request):
        payments = Payment.objects.filter(payee_name=request.user)
        return render(request, 'dashboards/paymentcompleted.html', {'payments':payments})

def totaldonation(request):
    data = Payment.objects.aggregate(Sum('payment_amount'))
    return render(request, 'dashboards/index.html', {'data':data})


@login_required
def viewpaymentown(request, payment_pk):
    payment = get_object_or_404(Payment, pk=payment_pk, name=request.user)
    if request.method == 'GET':
        form = PaymentForm(instance=payment)
        return render(request, 'dashboards/payment.html', {'payment':payment, 'form':form})
    else:
        try:
            form = PaymentForm(request.POST, instance=payment)
            form.save()
            return redirect('completedpayment')
        except ValueError:
            return render(request, 'dashboards/paymentcompleted.html', {'payment':payment, 'form':'form', 'error':'Bad Data. Try again.'})

вы можете использовать цикл python for loop, чтобы суммировать весь столбец и показать его на приборной панели.

def totaldonation(request):
    data = Payment.objects.all()
    total_sum = 0
    for item in data:
        total_sum += item.payment_amount

    return render(request, 'dashboards/index.html', {'sum':total_sum})

Это суммирует все значения, которые находятся в payment_amount каждого элемента в платежной модели.

Вернуться на верх