我正在使用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/

10-10 13:28