django - 在 Django 中使用多个注解
问题描述
这是我的数据库:
class User(models.Model):
Name = models.TextField(null=True, blank=True, default=None)
class Salary(models.Model):
value = models.PositiveIntegerField(default=1)
name = models.ForeignKey(User, related_name='salarys', on_delete=models.CASCADE)
class Expense(models.Model):
value = models.PositiveIntegerField(default=1)
name = models.ForeignKey(User, related_name='expenses', on_delete=models.CASCADE)
I want to add all the salary and expenses of a user.
queryset = User.objects.annotate(total_salary=Sum('salarys__value', distinct=True) ,total_expense=Sum('expenses__value', distinct=True))
这是我的数据:
User table
id=1; name= ram
Salary table
id =1; value = 12000
id = 2; value = 8000
Expense table
id =1; value=5000
id=2; value = 3000
预期产出: total_Salary = 20000;total_expense=8000 输出
获得: total_salary=40000;总费用 = 16000
每个输出都乘以另一个表中的数据的次数。谁能帮我解决这个问题
解决方案
如果您尝试组合类似的聚合,看起来这是不可能的。仅适用于具有不同的计数。如需关闭,请参阅文档:https ://docs.djangoproject.com/en/4.0/topics/db/aggregation/#combining-multiple-aggregations
由于 annotate 返回一个查询集而不是一个 dict(在聚合的情况下),您可以尝试链接多个 like values().annotate("field1").annotate("field2")
。为我工作,但请从您的查询集中检查 sql 以进行调试,以防您无法按需要运行查询。
推荐阅读
- html - 如何仅在站点的一个位置自定义占位符
- javascript - 将 new Class() 和函数链接到 JavaScript 中的同一个变量?
- bash - 遍历文件以查找字符串并将包含该字符串的文件发送到 bash 中的同名目录
- intellij-idea - 从 java 到 kotlin 的转换让我感到困惑
- android - Android:在 MVVM 中使用 Transformations.switchMap 进行顺序调用
- django - 重新加载数据库对象而不重新加载整个页面
- python - 为什么 (2**53+1) - int(float(2**53+1)) 返回错误 1?
- javascript - 单击后如何删除或禁用 onClick 事件侦听器?
- git - git grepping 文件名
- c# - 当 xaml 中的“绑定”ItemsSource 时,ListView 为空白,但是如果直接设置属性,则填充列表视图?