0

我有两种情况:

情况1:

qs = Stockdata.objects.annotate(sales_sum=Coalesce(Sum('salestock__quantity')))
qs2 = Stockdata.objects.annotate(purchase_sum=Coalesce(Sum('purchasestock__quantity_p')))

案例二:

        qs = Stockdata.objects.annotate(
           sales_sum = Coalesce(Sum('salestock__quantity'),0),
           purchase_sum = Coalesce(Sum('purchasestock__quantity_p'),0))

案例 1 中的结果绝对完美,但是当我尝试案例 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。

谢谢

4

0 回答 0