python - Django ORM 左连接与 GROUP BY 和 SUM

标签 python django django-orm django-1.8

我使用的是 Django 1.8。

我有一个 User 模型和一个 UserAction 模型。用户有一个类型。 UserAction 有一个时间,表示该操作花费了多长时间。它们看起来像这样:

class User(models.Model):
   user_type = models.IntegerField()

class UserAction:
   user = models.ForeignKey(User)
   time = models.IntegerField()

现在我想做的是获取某种类型的所有用户以及他们的操作时间总和。所以它看起来像这样:

{user:1,total_time=5000}、{user:2,total_time=230}、{user:3,total_time=0}

鉴于我在名为 type 的 var 中有所需的类型,我正在做的是:

UserAction.objects.filter(user__type=type)
.values('user').annotate(total_time=Sum(time))

这几乎满足了我的需要,但是它不包括没有任何 UserAction 与之关联的给定类型的用户,在这种情况下,我希望total_time仅为0。我一直在做一些搜索,但不太确定我会如何做到这一点。我知道如何在原始 SQL 中执行此操作(只需执行左连接),但 Django ORM 对我来说仍然很新。有人能在这里指出正确的方向吗?任何建议将不胜感激,非常感谢!

最佳答案

User.objects.filter(user_type=type).values('id').annotate(total_time=Sum(useraction__time))

关于python - Django ORM 左连接与 GROUP BY 和 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677459/

相关文章:

python - 正则表达式查找 '&' 没有结尾分号的位置

python - Apache 与 Django/Matplotlib 应用程序一起挂起

python - 如果celery broker未运行,则Django测试会随机卡住

python - Django:如何在佛罗里达设置中设置 EDT 时区

django 如何在 pre_save 函数中获取旧值和新值

python - Django : What kind of querysets should i look for when deciding on model indexes?

python - 在 Python 中利用蒙特卡洛预测收入

python - 在夹层中对页面进行分组

python - Django ManytoMany字段重复,属性错误: 'ManyRelatedManager'

python - 在列表中查找字符串第二次出现的索引