假设我的 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/