2016-01-22 39 views
0

我有兩個表,分別叫做ImageProduct在django查詢中混合註釋和聚合

class Image(): 
    product = Foreignkey(Product, related_name='image') 
    #some more field e.g. image_name, slug, caption, etc. 

產品可以有零,一個或最多5個圖像。 我想計算X號產品的數量。的圖像。

我試着用樸素的方法,但它做N(#products)+1 SQL查詢。

d = {0: 0, 1: 0, 2: 0, 3: 0, 4: 0, 5: 0} 
for x in product.objects.all(): 
    d[x.image.count()] += 1 

我認爲我們可以用select_related但不知道如何做到這一點做到這一點。 我試着做批註但不工作。 Image.objects.annotate(x=Count('product')) 我對django的經驗並不多。我想知道如果我可以用單個查詢或更優化的方式來做到這一點。

回答

0

這是一個由sql查詢組成的組。在django orm中,你可以從django doc中搜索「Filtering on annotations」。

Product.objects.annotate(num_images=Count('image')).filter(num_images=5)