У меня есть два случая:
Дело 1:
qs = Stockdata.objects.annotate(sales_sum=Coalesce(Sum('salestock__quantity')))
qs2 = Stockdata.objects.annotate(purchase_sum=Coalesce(Sum('purchasestock__quantity_p')))
Случай 2:
qs = Stockdata.objects.annotate(
sales_sum = Coalesce(Sum('salestock__quantity'),0),
purchase_sum = Coalesce(Sum('purchasestock__quantity_p'),0))
Результат, который приходит в случае 1, абсолютно идеален, но когда я пробую Случай 2, результат прибывает, умножая количество записей, которые я сделал ..
Может кто-нибудь сказать мне, в чем причина этого, и может дать идеальное решение для исправления ошибок, потому что 2-й случай - это то, что мне нужно использовать в моем проекте ...
Спасибо
Редактировать
Я пробовал это согласно ответу:
qs = Stockdata.objects.annotate(
sales_sum = Subquery(
Stock_total_sales.objects.filter(
sales = OuterRef('pk')
).values(
'sales'
).annotate(
the_sum = Sum('quantity')
).values('the_sum')
),
purchase_sum = Coalesce(Sum('purchasestock__quantity_p'),0)
Но есть небольшая проблема с использованием "the_sum" для дальнейшего вычитания аннотированных значений ..
Я делал это ранее:
qs1 = qs.annotate(
difference = ExpressionWrapper(F('purchase_sum') - F('sales_sum'), output_field=DecimalField()),
)
У кого-нибудь есть предложения, что я должен использовать вместо sales_sum.
Спасибо