2011-10-26 118 views
0

我在這些查詢的結果混淆:Django的註釋計數查詢輸出

>>> [f.count for f in Favourite.objects.annotate(count = Count('object_id'))] 
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

和第二個是

>>> [f['count'] for f in Favourite.objects.values('object_id').annotate(count=Count('object_id'))] 
[1, 5, 2, 1, 4, 2, 2, 3] 

但根據django docs第一查詢應該正常工作,和Favourite對象具有計數的object_id

誰能解釋爲什麼第二次查詢工作,但不是第一?

謝謝!

回答

4

第二個正在做的object_id一個group by。這是預期的行爲。第一個是簡單地計算數據庫中每一行的object_id。

+0

但正如我在文檔中提到,它應該工作? – Ahsan

+0

@Ahsan:您在文檔中引用的示例在'ManyToManyField'上使用註釋,因此您可以在不分組的情況下爲單條記錄計數> 1。對於數據庫表中實際列的「普通」字段,顯然每行只能有1個值,而不需要按某些東西進行分組。 –

+0

@ BERES Botond:我還試圖相同文檔'>>> [在Album.objects.annotate ge.c爲GE(C =計數( '流派'))]' 輸出:'[1,1,1 ,1,1,1,1,1]'這裏'genre'有'ManyToManyField'與'Album'的關係。和它的工作原理,當我沒有'>>> [GE [ 'C']爲GE在Album.objects.values( '流派')註釋(C =計數( '流派'))。]' 輸出:'[1 ,6,1]' – Ahsan