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