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

时间:2019-01-05 07:52:33

标签: django django-annotate

我有两种情况:

情况1:

BleManager.enableBluetooth()
.then(() => {
    // Success code
    console.log('The bluetooth is already enabled or the user confirm');
    this.setState({ isBluetooth: true })
    this.startConnect();
})
.catch((error) => {
    //Failure code
    Alert.alert('', 'Please turn on your bluetooth',
        [
            { text: 'Cancel', onPress: () => console.log('Cancel Pressed'), style: 'cancel' },
            {
                text: 'Settings', onPress: () => {
                    AndroidOpenSettings.bluetoothSettings()
                }
            },
        ])
    return;
});

情况2:

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

案例1的结果是绝对完美的,但是当我尝试案例2时,结果将乘以我输入的项目数。

任何人都可以告诉我这是什么原因,并且可以提供纠正错误的完美解决方案,因为第二种情况是我需要在项目中使用的...

谢谢

修改

我已经根据回复尝试过此操作:

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

但是在进一步减去带注释的值时使用“ the_sum”存在一些问题。

我以前曾经这样做过:

        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)

任何建议,而不是sales_sum,我都应该使用。

谢谢

0 个答案:

没有答案