2017-01-16 16 views
0

我有以下模型。Django ORM組由

Class A(models.Model): 
    tmp_field = models.IntegerField() 
    ... 
    ... 

現在我想只獲取id S和它們組合在一起基礎上,tmp場。

我的查詢看起來像

A.objects.all().values('id') 

所以,我想是這樣的。

[ 
    {tmp1: [id1, id2, id3]}, 
    {tmp2: [id5, id6, id7]}, 
    {tmp3: [id12, id213, id1299]} 
    ... 
] 

如何通過tmp_field做我組他們。

回答

1

更改值的查詢集來獲取tmp場以及

queryset = A.objects.all().values('id', 'tmp') 

然後構造你需要使用defaultdict

from collections import defaultdict 
d = defaultdict(list) 
for q in queryset: 
    d[q['tmp']].append(q['id']) 

結果d將是一本字典的字典,tmp作爲鑰匙。這與你的問題略有不同(你有一個詞典列表,每個鍵都有一個鍵)。如果您需要不同的數據結構,您可以調整代碼。

+0

這是一種方式。但我想避免python處理。有沒有辦法通過Django查詢來做到這一點。 – Pattu

+0

不,沒有簡單的方法可以使用Django ORM獲得您想要的分組。 – Alasdair