我需要能够对两个带注释的列的总和进行排序
所以我想做这样的事情:
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
然后:
c = c.order_by('variance')
有谁知道如何完成上面的事情吗?
其实,
c = c.annotate(variance=F('metric')-F('metric_prior'))
此外,您还可以通过表达式进行排序,这意味着您可以使用:
c = c.order_by(F('metric') - F('metric_prior'))
甚至只是:
c = c.order_by(Sum('results__metric') - Sum('results__metric_prior'))
Ticket 存在超过 4 年(到 2014 年),但它可以通过一些
.extra()
查询来完成,如下所示:
items = MyModel.objects.extra(
select = {'variance': 'SUM(relatedModel__someField) - SUM(relatedModel__someField)'},
)
是的,不同的 DBMS 可能有点不可预测。但是,如果你将 extra 中的语法限制为非常常见的 SQL,它应该或多或少在任何地方都可以工作。