我有两个名为Image
和Product
的表。
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_lated
来做到这一点,但不知道如何去做。
我尝试使用注释进行操作,但没有成功。
Image.objects.annotate(x=Count('产品'))
我对 django 没有太多经验。我想知道是否可以通过单个查询或更优化的方式来完成。
最佳答案
这是一个通过sql查询的分组。在 django orm 中,您可以从 django doc 中搜索“Filtering on comments”。
Product.objects.annotate(num_images=Count('image')).filter(num_images=5)
关于mysql - django 查询中混合注释和聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34940776/