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')