我正在使用django-eztables对数据表进行服务器端处理,并且我想添加一些涉及聚合的字段(如此处所述)
以下每个单独工作正常:
def get_queryset(self):
qs = super(SomeObjectDataTableView, self).get_queryset()
return qs.select_related().annotate(items_count=Count('items'))
和
def get_queryset(self):
qs = super(SomeObjectDataTableView, self).get_queryset()
return qs.select_related().annotate(total_sum=Sum('anotherobject__differentobject__total'))
但是,如果我尝试以任何一种顺序,以相同的顺序annotate()
或一个接一个地链接,它们最终都会得到相同的数字,这是它们各自应该是的乘积。
如果我添加distinct=True
到 Count,它会产生正确的值,但它仍然会使 Sum 给出一个膨胀的值。(同样,更改顺序没有帮助,并且 Sum 不带distinct
参数)
我在 SO 上看到了几个类似的问题,但大多数似乎都涉及多个计数,可以使用distinct=True
. 有一个有一个 Sum,但解决方案涉及使用extra()
和一些手工制作的 SQL,到目前为止,我无法适应我需要做的所有外键遍历(我使用了一点 SQL,但是我绝不是专家)。这是相关模型的基本设置,以防万一extra()
是唯一可行的解决方案:
- Item 有一个指向 SomeObject 的外键
- AnotherObject 有一个指向 DifferentObject 的外键和一个指向 SomeObject 的外键
如果有人知道如何解决这些问题并在我的查询集上获得两个注释,将不胜感激。