없이 장고의 필터를 조회 할 '단지'가 앉아가 어떻게이 개 모델을 가지고 여러 번
ChildModel : ParentModel에 외부 키를 가지고
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())
는 ParentModel 여러 번 제공 .
적어도 하나의 ChildModel을 참조하는 모든 ParentModel을 쿼리하는 방법은 무엇입니까? 그리고
없이 장고의 필터를 조회 할 '단지'가 앉아가 어떻게이 개 모델을 가지고 여러 번
ChildModel : ParentModel에 외부 키를 가지고
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all())
는 ParentModel 여러 번 제공 .
적어도 하나의 ChildModel을 참조하는 모든 ParentModel을 쿼리하는 방법은 무엇입니까? 그리고
... 여러 번없이 당신은 거의
ParentModel.objects.filter(childmodel__in=ChildModel.objects.all()).distinct()
당신은 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 지원을 사용할 수있는 경우
, 당신은 뭔가를 할 수 있습니다.