mysql - django 查询中混合注释和聚合

标签 mysql django django-models django-orm

我有两个名为ImageProduct 的表。

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/

相关文章:

Django 属性错误 : 'module' object has no attribute 'SubfieldBase'

mysql - 在 R 中分别导入和处理多个 MySQL 表

mysql - 在不同字段中查找具有相同值的记录?

django - 南数据从父类迁移到子类clobbers父数据

python - 如何更新存储在 Django 缓存中的字典?

python - Django:为初始组提供迁移

MYSQL - 合并具有多个重复值的行,然后删除重复项

MySQL - 在全文搜索中获取列的前 100 个字符(WHERE MATCH)

django - docker 中主机的 localhost 和 postgres 之间的区别

python - Django:模型之间的引用