减去两个带注释的列

Jam*_*s R 25 python django django-orm

我需要能够对两个带注释的列的聚合进行排序

所以我想做这样的事情:

c = c.annotate(metric=Sum('results__metric'))
c = c.annotate(metric_prior=Sum('results__metric_prior'))
c = c.annotate(variance=F('metric')-F('metric_prior')) #doesn't work, for demonstrative purposes only
Run Code Online (Sandbox Code Playgroud)

然后:

c = c.order_by('variance')
Run Code Online (Sandbox Code Playgroud)

有谁知道如何完成上述的事情?

mac*_*iek 12

其实,

c = c.annotate(variance=F('metric')-F('metric_prior'))
Run Code Online (Sandbox Code Playgroud)

按照你想要的方式 开始使用Django 1.8.

此外,您还可以通过表达式进行排序,这意味着您可以使用:

c = c.order_by(F('metric') - F('metric_prior'))
Run Code Online (Sandbox Code Playgroud)

甚至只是:

c = c.order_by(Sum('results__metric') - Sum('results__metric_prior'))
Run Code Online (Sandbox Code Playgroud)