如何在没有多次出现的情况下查询django中的过滤器

时间:2009-04-28 09:20:55

标签: python django

我有2个型号:

ParentModel:'只是'坐在那里

ChildModel:具有ParentModel的外键

ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())会多次出现ParentModel。

如何查询至少有一个引用它的ChildModel的所有ParentModel?没有多次出现......

2 个答案:

答案 0 :(得分:4)

你几乎做对了......

ParentModel.objects.filter(childmodel__in=ChildModel.objects.all()).distinct()

答案 1 :(得分:0)

如果childmodel__in=ChildModel.objects.all()个对象的数量很大,您可能希望避免使用ChildModel。这将生成在列表中枚举的所有ChildModel id的SQL,可能会创建一个巨大的SQL查询。

如果您可以使用Django 1.1 with aggregation支持,则可以执行以下操作:

ParentModel.objects.annotate(num_children=Count('child')).filter(num_children__gte=1)

应该生成更好的SQL。