Django ORM 左加入 GROUP BY 和 SUM
Django ORM Left Join With GROUP BY and SUM
我正在使用 Django 1.8。
我有一个 User
模型和一个 UserAction
模型。一个用户有一个类型。 UserAction 有一个时间,表示该操作花费了多长时间。它们看起来像这样:
class User(models.Model):
user_type = models.IntegerField()
class UserAction:
user = models.ForeignKey(User)
time = models.IntegerField()
现在我想要做的是获取特定类型的所有用户以及他们 actions.So 的时间总和,它看起来像这样:
{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))
我正在使用 Django 1.8。
我有一个 User
模型和一个 UserAction
模型。一个用户有一个类型。 UserAction 有一个时间,表示该操作花费了多长时间。它们看起来像这样:
class User(models.Model):
user_type = models.IntegerField()
class UserAction:
user = models.ForeignKey(User)
time = models.IntegerField()
现在我想要做的是获取特定类型的所有用户以及他们 actions.So 的时间总和,它看起来像这样:
{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))