2009-04-28 4 views
1

없이 장고의 필터를 조회 할 '단지'가 앉아가 어떻게이 개 모델을 가지고 여러 번

ChildModel : ParentModel에 외부 키를 가지고

ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())는 ParentModel 여러 번 제공 .

적어도 하나의 ChildModel을 참조하는 모든 ParentModel을 쿼리하는 방법은 무엇입니까? 그리고

답변

4

... 여러 번없이 당신은 거의

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

당신은 ChildModel 개체의 수가 큰 경우 childmodel__in=ChildModel.objects.all()을 사용하지 않도록 할 수 있습니다 ... 바로 그것을 얻었다. 그러면 목록에 열거 된 모든 ChildModel의 ID를 가진 SQL이 생성되어 거대한 SQL 쿼리를 만들 수 있습니다. 더 나은 SQL을 생성해야

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

: 당신이 Django 1.1 with aggregation 지원을 사용할 수있는 경우

, 당신은 뭔가를 할 수 있습니다.