Python 查找具有多个“子”对象的Django模型记录?

Python 查找具有多个“子”对象的Django模型记录?,python,django,django-models,Python,Django,Django Models,如果我在Django中有两个模型,Parent和Child,其中Child与Parent具有外键关系,如下所示: class Parent(models.Model): parent_name = models.CharField(max_length=128, blank=False, default='no name') class Child(models.Model): child_name = models.CharField(max_length=128, blan

如果我在Django中有两个模型,Parent和Child,其中Child与Parent具有外键关系,如下所示:

class Parent(models.Model):
    parent_name = models.CharField(max_length=128, blank=False, default='no name')

class Child(models.Model):
    child_name = models.CharField(max_length=128, blank=False, default='no name')
    parent = models.ForeignKey('app.Parent', on_delete=models.CASCADE, null=False)

如何找到至少有两个子记录的所有父记录?理想情况下,解决方案将在父项上使用一个.filter语句。

您可以对子项的数量进行注释,然后对该数量进行筛选,如:

from django.db.models import Count

Parent.objects.annotate(
    nchild=Count('child')
).filter(nchild__gt=1)
这将生成如下查询:

SELECT parent.*, COUNT(child.id) AS nchild
FROM parent
LEFT OUTER JOIN child ON parent.id = child.parent_id
GROUP BY parent.id
HAVING COUNT(child.id) > 1

可以更改.filter。。condition to childs nchild数的各种条件,例如,nchild=4筛选正好有四个孩子的家长,而~Qnchild=7将排除正好有七个孩子的所有家长。因此,我们可以制作更复杂的过滤器。

正是我想要的!谢谢