我有2种型号:如何查询在Django过滤器无需多次出现
ParentModel: '只是' 坐在那里
ChildModel:有一个外键ParentModel
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())
给人ParentModel多次出现。
如何查询至少有一个引用它的ChildModel的所有ParentModel?而如果没有多次出现...
我有2种型号:如何查询在Django过滤器无需多次出现
ParentModel: '只是' 坐在那里
ChildModel:有一个外键ParentModel
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())
给人ParentModel多次出现。
如何查询至少有一个引用它的ChildModel的所有ParentModel?而如果没有多次出现...
你几乎得到它的权利......
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all()).distinct()
你可能想避免使用childmodel__in=ChildModel.objects.all()
如果ChildModel
对象的数量是很大的。这将生成SQL列表中所有ChildModel
id枚举,可能会创建一个巨大的SQL查询。
如果你可以使用Django 1.1 with aggregation支持,你可以这样做:
ParentModel.objects.annotate(num_children=Count('child')).filter(num_children__gte=1)
应该生成更好的SQL。