型号:
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)
如何获取有孩子的父母列表?
我现在的解决方案是迭代Parent-queryset,然后检查它是否有子节点。关于这个查询是否有任何干净的解决方案?
谢谢你们!
答案 0 :(得分:3)
parentList = Child.objects.filter(parent_id__isnull=False).values_list('parent_id', flat=True)
parentList = list(set(parentList))
将set设置为仅获取Parent一次
答案 1 :(得分: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的父母。
parents = Parent.objects.filter(id__in = list(set(parents_id_that_have_childs)))
答案 2 :(得分:0)
你真的应该看看django-mptt。
但关于你的问题:
parents_with_child = Parent.objects.exclude(child_set=None)