Как вычесть аннотированные значения в Django? - PullRequest
0 голосов
/ 05 декабря 2018

Я не могу вычесть аннотированные значения двух разных запросов в представлениях django.

Я попробовал это:

    qs = Stockdata.objects.filter(User=self.request.user, Company=company_details.pk, Date__gte=selectdatefield_details.Start_Date, Date__lte=selectdatefield_details.End_Date)
    total = qs.annotate(the_sum=Coalesce(Sum('salestock__Quantity'),0)).values('the_sum')
    total2 = qs.annotate(the_sum2=Coalesce(Sum('purchasestock__Quantity_p'),0)).values('the_sum2')
    totalqty = total2 - total

Я пытался использовать Coalesce из django.db.models.function, ноПолучение этой ошибки

TypeError: unsupported operand type(s) for -: 'QuerySet' and 'QuerySet'

Есть ли в django какая-либо функция для вычитания значений?

Кто-нибудь знает, что я делаю неправильно в своем коде?

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Попробуйте

qs = qs.annotate(
    sales_sum = Coalesce(Sum('salestock__Quantity'),0),
    purchase_sum = Coalesce(Sum('purchasestock__Quantity_p'),0)
)
qs = qs.annotate(
    difference = ExpressionWrapper(F('sales_sum') - F('purchase_sum'), output_field=DecimalField())
) 
0 голосов
/ 05 декабря 2018

Вам нужно использовать агрегат :

total = qs.aggregate(the_sum=Coalesce(Sum('salestock__Quantity'),0))
total2 = qs.aggregate(the_sum2=Coalesce(Sum('purchasestock__Quantity_p'),0))

totalqty = total2['the_sum2'] - total['the_sum']
...