2

楷模:

class Parent(models.Model)
  name = models.CharField(max_length=20L)

class Child(models.Model)
  parent_id = models.ForeignKey('Parent')
  name = models.CharField(max_length=20L)

如何获取有孩子的父母名单?

我现在的解决方案是通过迭代父查询集然后检查它是否有一个孩子。关于这个查询有什么干净的解决方案吗?

多谢你们!

4

3 回答 3

3

这对我有用。

parents_id_that_have_childs = Child.objects.filter(parent_id__isnull=False).values_list('parent_id', flat=True)

parents = Parent.objects.filter(id__in=list(set(parents_id_that_have_childs)))

让我解释:

在 parents_id_that_have_childs 中,您将拥有父母的唯一 ID 列表,这些父母显然拥有子 obj。

然后在您中过滤具有这些 ID 的父母。

父母 = Parent.objects.filter(id__in=list(set(parents_id_that_have_childs)))

于 2014-10-12T18:41:15.897 回答
3
parentList = Child.objects.filter(parent_id__isnull=False).values_list('parent_id', flat=True)

parentList = list(set(parentList))

应用集仅获取一次父级

于 2013-07-17T10:42:29.030 回答
0

你真的应该看看 django-mptt。

但是关于你的问题:

parents_with_child = Parent.objects.exclude(child_set=None)
于 2013-07-17T10:44:38.673 回答