2010-11-29 128 views

回答

2

如果我正確理解你,這應該做到這一點。 list將包含按照每個對象的得分最高的事物的文本排序的模型A的所有對象的列表。

dict = {} 
list = [] 
for a in A.objects.all(): 
    dict[a] = a.things.all().order_by("-score")[0].text 
for k, v in sorted(dict.items(), key=lambda x: x[1]): 
    list.append(k) 

有可能是把它寫一個漂亮的方式,但我不認爲一個把我的頭頂部...

+0

我傾向於贊成你的方法,因爲它非常簡單,與在Daniel的博客文章中完成原始SQL或雜耍元組和字典相比。 – 2010-11-30 17:23:15

2

這樣的事情真的很難。通過該項目與分值文本由最高得分彙總,然後進行排序:聚合可以幫助你,如果你想通過排序得分

from django.db.models import Max 
A.objects.annotate(highest_b=Max(B__score)).order_by('highest_b') 

但實際上你想要做兩次手術。無論你使用什麼語言,這都很棘手。我已經寫過關於這個問題on my blog - 爲了您的目的,我認爲通過.raw()方法在SQL中執行操作可能是最簡單的。

+0

不幸的是,對於我的應用程序來說,dbms有可能因客戶端不同而不同,因此引入原始SQL查詢將很難維護。 – 2010-11-30 17:01:29