2013-06-28 55 views
20

我需要能夠進行排序兩個註釋列減去2分註釋列

的總

所以我喜歡做這樣的事情:

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') 

有誰知道如何做到像上面?

+3

我相信Django的ORM不能彎曲了這麼多,但我upvoting你的問題,因爲我想看看是否有人能這麼遠伸之。我的建議是使用原始SQL或使用更強大的ORM(如SQLAlchemy)(您可以將其與Django ORM一起使用,請參閱SQLSoup)使用。 –

+3

這個特性已經接近Django的未來版本https://github.com/django/django/pull/2496 – Anentropic

回答

1

Ticket有超過4年(2014年),但它可以通過一些小.extra()查詢來完成,像這樣:

items = MyModel.objects.extra(
    select = {'variance': 'SUM(relatedModel__someField) - SUM(relatedModel__someField)'}, 
) 

是的,它可以是一個有點不可預知的不同DBMS。但是,如果您將額外的語法限制在非常常見的SQL中,它應該在任何地方或多或少地工作。