我有两个名为Image
和Product
的表。
class Image():
product = Foreignkey(Product, related_name='image')
#some more field e.g. image_name, slug, caption, etc.
产品可以有ZERO,一张或最多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 :(得分:0)
这是一个拥有sql查询的组。在django orm中,您可以搜索"过滤注释"来自django doc。
Product.objects.annotate(num_images=Count('image')).filter(num_images=5)