Je souhaite obtenir la somme par ligne de toutes les valeurs précédentes du montant de la colonne.
models.py
Id paid_into payment_date amount SumAmount --------------------------------------------------------- 1 ONLINE 12-09-2019 40.00 40.00 2 ONLINE 12-09-2019 40.00 80.00 3 ONLINE 12-09-2019 45.00 125.00 4 ONLINE 12-09-2019 50.00 175.00
J'ai essayé l'ensemble de requêtes
pay_receipt = PaymentRecord.objects.filter(Q(payment_date__range=[startdate, enddate]),Q(paid_into='ONLINE') | Q(paid_into='CHEQUE')).annotate(totals=Sum('amount')).order_by('payment_date')
Je veux le résultat comme celui-ci
class PaymentRecord(models.Model):
invoice_no = models.ForeignKey(Invoice, unique=False, related_name='paymentrecord', on_delete=models.CASCADE)
amount = models.CharField(max_length=10)
paid_into = models.CharField(max_length=40, choices=PAID)
payment_date = models.DateField(auto_now=False, auto_now_add=False)
cheque_date = models.DateField(auto_now=False, auto_now_add=False, null=True, blank=True)
cheque_no = models.CharField(max_length=20, null=True, blank=True)
notes = models.CharField(max_length=100, null=True, blank=True)
3 Réponses :
Vous pouvez essayer ceci est simplement du code pour vous, j'espère que cela fonctionnera!
<td>{{ query}}</td>
dans le fichier html:
query = ModelName.objects.aggregate(Sum('field_name'))
context = {'query':query}
reutrn render(request,'your_template_name',context)
Je veux que le résultat soit sage.
@SachinSingh Essayez ceci, cela fonctionnera également pour les lignes
j'obtiens un résultat sous forme de dict. {'amount__sum': 157925.0} comment puis-je imprimer le tableau que j'ai mentionné ci-dessus.
Vous pouvez simplement ajouter du contexte et ajouter dans votre fichier html
pouvez-vous s'il vous plaît partager un extrait comment faire cela.
Réponse @SachinSingh mise à jour
Sur Django> = 2 et sur une base de données prise en charge, vous pouvez utiliser la fonction Window pour obtenir l'accumulation:
from django.db.models import Window, Sum
PaymentRecord.objects.filter(...).annotate(
SumAmount=Window(Sum(F('amount')), order_by=F('pk').asc())
).values('id', 'paid_into', 'payment_date', 'amount', 'SumAmount')
J'utilise mysql 5.7 et j'obtiens une erreur de syntaxe près de '(ORDER BY account_paymentrecord . id ASC) AS SumAmount FROM `account_payment'
Vous obtiendrez probablement ce que vous voulez avec les éléments suivants:
from django.db.models import Window, Sum
PaymentRecord.objects.filter(...).annotate(
SumAmount=Window(
Sum(F('amount')),
partition_by=F('paid_into'),
order_by=F('payment_date').asc()
)
).values('id', 'paid_into', 'payment_date', 'amount', 'SumAmount')