Estoy tratando de hacer un libro mayor del partido. qué detalles se mostrarán por un resultado de búsqueda de fecha. Tengo un saldo de nombre de columna que mostrará datos acumulativos por búsqueda de fecha. Quiero ver la columna de saldo en mi tabla que depende de la columna de saldo.
-------------------------------------- amount payment balance CumBalance -------------------------------------- 10 5 5 5 20 5 15 20 10 15 -5 15Mi vista:
def partyDetails(request,pk): form = DateRangeForm() if request.method == 'POST': form = DateRangeForm(request.POST or None) if form.is_valid(): cumulative_balance = PurchasePayment.objects.all() .filter(vendor=pk,date__range= (form.cleaned_data['start_date'], form.cleaned_data['end_date'])) .annotate(cumbalance =Sum('balance')) else: return redirect('party_ledger') return render(request, 'purchase/party_details.html', {'dateform':form, 'cumbal':cumulative_balance,'name':pk}) También probé .aggregate(Sum('balance'))
mi modelo:
class PurchasePayment(models.Model): id = models.AutoField(primary_key=True) date = models.DateField(default=date.today) invoice = models.CharField(max_length=20) vendor = models.CharField(max_length=50) amount = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) discount = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) payment = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) balance = models.DecimalField(max_digits=9, decimal_places=2)A partir de django-2.0 , puede usar una expresión de Window [Django-doc] :
from django.db.models import F, Sum, Window cumulative_balance = PurchasePayment.objects.filter( vendor=pk, date__range=(form.cleaned_data['start_date'], form.cleaned_data['end_date']) ).order_by('pk').annotate( cumbalance= Window( Sum('balance') , order_by=F('id').asc()) )