django QuerySet适用于至少有一个孩子的父母

时间:2018-06-11 22:38:26

标签: python django one-to-many

我有以下多对一的关系:

class Adult(models.Model):
    name = models.CharField(max_length=200)

class Child(models.Model):
    name = models.CharField(max_length=200)
    adult = models.ForeignKey(Adult)

我正在尝试找到一种方法来获取至少有一个孩子的成年人的QuerySet,然后进一步对该QuerySet应用过滤器。在SQL中,为了获得至少有一个孩子的成人id列表,我可以这样做:

select distinct(child.adult_id) from child;

但是在django尝试同样的事情我遇到了麻烦。我尝试了以下内容,只做了一些修改:

adult_ids = Child.objects.values_list('adult__id').distinct()
adults_with_children = Adult.objects.filter( id__in=adults )

但是我一直在生成一个sql查询,该查询涉及第一行中与成人表的连接。我怎样才能找到以更快/更好的方式生育至少一个孩子的成年人?提前谢谢。

1 个答案:

答案 0 :(得分:0)

你试过这个吗,

adults_with_alteast_one_child = Adult.objects.filter(child__isnull=False)

这将排除与Adults有空关系的所有Child

有关详细信息,请阅读isnull