2011-04-23 77 views
5

我試圖做一個「group by」來拉出一個測驗所有者測驗中所有猜測的列表,分組由用戶進行註釋並且用對用戶已經做出多少次猜測的計數進行了註釋。Django「group by」via annotations:從.value()獲取對象對一個ID

相關機型:

class Quiz(models.Model): 
    user = models.ForeignKey(User) 
    ... 

class Guess(models.Model): 
    user = models.ForeignKey(User) 
    quiz = models.ForegnKey(Quiz) 
    ... 

這個查詢:

guessors = Guess.objects.filter(quiz__user=request.user).values('user').annotate(cnt=Count('user')).order_by('cnt') 

返回這樣的事情,這是非常接近我所需要的:

{'cnt': 5, 'user': 5} 
{'cnt': 3, 'user': 4} 
{'cnt': 2, 'user': 3} 
{'cnt': 1, 'user': 2} 

注意,但是,當我想要的是一個完整的用戶對象時,'user'被作爲int返回。有關如何最有效地獲取完整用戶對象的任何建議?

+0

注:我在Django 1.3上 – mitchf 2011-04-23 03:54:49

回答

4

在我短暫而緊張的時間與Django,我發現group_by函數是我最想念的SQL功能之一。我已經嘗試了上面使用的values()聚合方法,但遇到了同樣的問題,我想要返回一個對象。我結束了使用raw SQL,這不是很漂亮,但爲我所需要的。

1

一種選擇是嘗試使用雙下劃線符號讓所有的用戶領域,因此,例如,你可以做類似的值(「用戶_ 用戶名」,「用戶 _someOtherField」)。我不確定要獲取整個用戶對象,也許其他人可以獲得更多的幫助。