Python 如何在不同的查询中计算两个聚合字段:';dict';对象没有属性';变量名';德扬戈

Python 如何在不同的查询中计算两个聚合字段:';dict';对象没有属性';变量名';德扬戈,python,django,Python,Django,我需要在两个不同查询中的两个聚合字段之间进行减法: class ModelA(models.Model): price = models.IntegerField() #others class ModelB(models.Model): cost = models.IntegerField() #others paid_price = ModelA.objects.filter(status=True).annotate( total_paid = S

我需要在两个不同查询中的两个聚合字段之间进行减法:

class ModelA(models.Model):
    price = models.IntegerField()
    #others
class ModelB(models.Model):
    cost = models.IntegerField()
    #others

paid_price = ModelA.objects.filter(status=True).annotate(
    total_paid = Sum(F('price')),
    #some more fields
        ).aggregate(
            paid = Sum(F('total_paid'))
            #some more fields
        )

paid_costs = ModelB.objects.filter(status=True).annotate(
    total_cost = Sum(F('cost')),
    #some more fields
        ).aggregate(
            t_cost= Sum(F('total_paid')),
            #some more fields
        )
我需要用
paid
计算
t_成本
我尝试了这个
final_result=paid_price.paid-paid_成本。t_成本

但提出了这个错误:

“dict”对象没有“paid”属性

有没有办法做到这一点?
注意:模型之间没有连接

聚合结果是字典,您需要通过键获取计算值

final_result = paid_price['paid'] - paid_costs['t_cost']
注意:除非您有一些分组(我在查询中看不到),否则作为模型一部分的字段上的注释不会起任何作用

如果只想重命名查询中的字段,请删除
Sum

ModelA.objects.annotate(
    total_paid=F('price')
)
方法总是产生一个dict结果

返回通过
QuerySet
计算的聚合值(平均值、总和等)字典

那么这个表达应该是,

final_result = paid_price['paid'] - paid_costs['t_cost']
final_result=已付价格['paid']-已付成本['t_cost']