擅长:python、mysql、java
<p>报告了这个bug <a href="https://code.djangoproject.com/ticket/10060" rel="nofollow noreferrer">here</a>,但即使在django1.11中也没有解决。这个问题与连接反向关系中的两个表有关。
请注意,distinct参数对Count有效,但对Sum无效。所以我用了一个技巧,写了下面的ORM,效果很好:</p>
<pre><code>print(Table1.objects.annotate(
temp_Exp1=Sum(
Case(
When(table3__Table2__Column2__in=[2, 3],
then=F('table3__Column3')),
default=Value(0)
),),
temp_Exp2=Sum(
Case(
When(table4__Table3__Table2__Column2=3,
then=F('table4__Column4')),
default=Value(0)
),),
table3_count=Count('table3'),
table3_count_distinct=Count('table3', distinct=True),
table4_count=Count('table4'),
table4_count_distinct=Count('table4', distinct=True),
).annotate(
Exp1=F('temp_Exp1')*F('table3_count_distinct')/F('table3_count'),
Exp2=F('temp_Exp2')*F('table4_count_distinct')/F('table4_count'),
).values('Exp1', 'Exp2'))
</code></pre>