代码之家  ›  专栏  ›  技术社区  ›  Niladry Kar

Django注释在两种情况下给出了两种不同的结果

  •  0
  • Niladry Kar  · 技术社区  · 7 年前

    我有两个案子:

    案例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))
    

    谁能告诉我这是什么原因,并能给出一个完美的解决方案来纠正错误,因为第二种情况是我需要在我的项目中使用的。。。

    我试过这样的回答:

            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)
    

    但是在进一步减去带注释的值时使用“和”有点问题。。

            qs1 = qs.annotate(
            difference = ExpressionWrapper(F('purchase_sum') - F('sales_sum'), output_field=DecimalField()),
    
        ) 
    

    有人建议我用什么来代替销售金额吗。

    谢谢你

    0 回复  |  直到 7 年前