python - Django使用ManyToMany过滤多次映射

标签 python django

假设我的 models.py 中有类似的内容:

class A(models.Model):
  name = CharField(max_length=20)

class B(models.Model):
  a = models.ManyToManyField(A)

我想要得到与B有多次映射的A。

最佳答案

我们可以用 B 的数量来注释 A 对象,然后我们根据该数字进行过滤,例如:

from django.db.models import Count

A.objects.annotate(
    n_b=Count('b')
).filter(n_b__gt=1)

因此,所有A对象都用属性.n_b(相关B的数量)进行注释,然后我们进行过滤此数字 n_b 大于 (__gt) 1。

然后,这会生成一个如下查询:

SELECT a.*, COUNT(a_b.b_id) AS n_b
FROM a
LEFT OUTER JOIN a_b ON a_b.a_id = a.id
GROUP BY a.id
<b>HAVING COUNT(a_b.b_id) > 1</b>

关于python - Django使用ManyToMany过滤多次映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52754944/

相关文章:

python - Django 和 Oracle DB 失去联系

django - 无法使用 Docker 数据库 : 'could not translate host name "db"to address: Name or service not known' 在 VS Code 中调试 Django 应用程序

python - Django 休息框架保存缩略图

python - 使用正则表达式删除相对行

django - 具有FileField的Django模型-动态“upload_to”参数

Python3,与列表重新匹配

python - 如何执行批量更新而不是更新每一行?

python - 为什么两个矩阵的相关性返回 nan?

python - 如何在 input() 正在进行时访问 input() 函数

python - 将集合划分为元素数量相等的子集