我有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。