减去两个带注释的列

2024-04-25 17:51:26 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以我想做这样的事情:

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

然后:

^{pr2}$

有人知道如何完成上述任务吗?在


Tags: onlyfor排序事情metricresultsworksum
2条回答

实际上

c = c.annotate(variance=F('metric')-F('metric_prior'))

works as you would like it tostarting with Django 1.8。在

此外,您还可以按表达式排序,这意味着您只需使用:

^{pr2}$

或者只是:

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,那么它在任何地方都应该或多或少地起作用。在

相关问题 更多 >