Аннотация Джанго дает два разных результата в двух случаях - PullRequest
0 голосов
/ 05 января 2019

У меня есть два случая:

Дело 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.

Спасибо

...