Я не могу вычесть аннотированные значения двух разных запросов в представлениях 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 какая-нибудь функция для вычитания значений?
Кто-нибудь знает, что я делаю не так в своем коде?





Вам нужно использовать совокупность:
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']
Я хочу найти общее количество для каждого экземпляра запаса, но агрегат даст мне значение общего количества для всех запасов ...
Пытаться
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())
)
Теперь он выдает мне эту ошибку: «TypeError: annotate () отсутствует 1 обязательный позиционный аргумент:« self »» ... Как это исправить?
Извините, это qs.annotate, а не queryset.annotate. Исправил.
Но он не возвращает никаких значений, он выглядит следующим образом: «<QuerySet [<Stockdata: Iphone>, <Stockdata: Samsung Galaxy>]>» ... «Iphone» и «Samsung Galaxy» - это некоторые записи, которые я поместил в свои Stockdata модель...
В конце проверьте вывод print(qs.values()).
Не могли бы вы разместить свои модели?