2013-06-18 95 views
1

我有以下模型。Group-By與Django模型

class Compared(models.Model): 
    store = models.ForeignKey(Store) 
    product = models.ForeignKey(Product) 

    class Meta(): 
     unique_together = ('store', 'product') 

並與其中的以下類型的數據。

(store, product) 
(1, 1) 
(2, 1) 
(3, 1) 
(2, 2) 
(2, 3) 
(3, 3) 
(3, 2) 

我想按產品分組並獲得該組中的所有商店。

(product, (stores)) 
(1, (1, 2, 3)) 
(2, (2, 3)) 
(3, (2, 3)) 

是否有一個內置的查詢功能來實現,或者我必須手動使它們如此?

+0

也許[that](http://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django)可以幫助你。 – lalo

+0

希望你試着先搜索Umair。這是否回答你的問題:[如何在django中查詢GROUP BY?](http://stackoverflow.com/a/629691/977931)? – stellarchariot

回答

0

您可以itertools組:

from itertools import group_by  
cs = Compared.objects.all().order_by('product__pk')) 
for p, l in groupby(l , key = lambda x: x.store.pk): 
    print p.pk     #the produt name 
    print [ s.pk for s in l ] #stores pks 
    print (p.pk, tuple(s.pk for s in l )) 

注意:語法未經測試。

提示:這個分組'在內存',但在數據庫中。

通知:順序是重要的。