如何参数化django聚合?

时间:2014-01-14 20:57:19

标签: django aggregation

我想做点什么

query.annotate(Count('foreign_model_relation', somefield_from_foreign_model=some_value))

这意味着,我想计算,来自另一个查询集的对象有多少指向此对象。使用像filter(in = other_queryset)这样的东西之间的区别是,我想在一个查询中将它组合起来,以避免为每个对象生成一个查询。

简化型号:

  • 对象
    • 组(组)
  • 投票
    • object(Object)
    • up(布尔)

现在我想查询一个组的所有对象的向上/向下计数,包含一个或两个查询,而不是每个对象有一个/两个查询。

1 个答案:

答案 0 :(得分:1)

您可以使用两个查询执行此操作:

YourObject.objects.filter(vote__up=True, group=some_group).annotate(total_votes_up=Count('vote'))
YourObject.objects.filter(vote__up=False, group=some_group).annotate(total_votes_down=Count('vote'))

但我认为应该有更多优雅的方式来做到这一点。