我遇到了這個問題,並希望尋求您的幫助。使用Django查詢過濾項目
背景: 我有一袋球,每個球都有一個年齡(紅色和藍色)和顏色屬性。
我想要的是獲得前10名「最年輕」的球,並且最多有3個藍色球(這意味着如果在10個最小的球列表中有3個以上的藍色球,則替換「redudant」與年輕的紅球最古老的藍色球)
要獲得前10名:
sel_balls = Ball.objects.all().sort('age')[:10]
現在,也滿足「至多3個藍色球」的條件,我需要進一步處理:
- 迭代通過^ h sel_balls和計數藍色球的(B =)
- 若B < = 3的號碼:什麼也不做
否則:獲得追加B - 3顆紅球,以取代舊(B - 3)藍色球(和這些紅球肯定不會出現在已經取出的原始10個球中)。我想我可以通過獲取紅球列表中最早的年齡值做到這一點,不喜歡另一個查詢:
add_reds = Ball.objects.filter(年齡> = oldest_sel_age)[:乙 - 3]
我的問題是:
- 有沒有辦法,我能滿足只有一個查詢的約束什麼辦法?
- 如果我必須做2個查詢,有沒有比我上面提到的方法更快的方法?
謝謝大家。
你有沒有嘗試在模型中的類方法的功能?你可以在那裏做你的邏輯,你可以在你的視圖中這樣稱呼它:'sel_balls = Ball.sort_balls' – catherine 2013-03-13 08:35:40