2012-12-11 7 views
21

이것은 중복 질문이 될 수밖에 없지만 다른 것들은 찾을 수 없습니다. 불만이있는 사진 목록을 얻으려고합니다. 간단히 불만을 제기하고 관련 사진을 처리 할 수는 없습니다. 사진이 필요합니다.관련 개체가있는 Django 개체

이 작업을해야하지만 잘하지 않는 것 :

Photo.objects.filter(complaint__id__gte=0) 

이 가장 효율적인 방법은 아닌 것 같아 : 더 좋은 방법이

Photo.objects.annotate(Count('complaint')).exclude(complaint__count=0) 

있습니까? https://docs.djangoproject.com/en/dev/topics/db/queries/

답변

47

방법 ...

Photo.objects.filter(complaint__isnull=False)

나는 최선이 무엇인지 잘 모르겠지만, 그뿐만 아니라 작동합니다. 여기

Photo.objects.exclude(complaint=None)

생성 된 SQL 쿼리는 .filter(complaint__isnull=False)와 경우와 동일하지 않습니다, 그러나 의미는 동일하다.

+0

감사합니다! – Jake

+13

annotate와 똑같이 복제하려면 끝에 .distinct()가 필요할 수도 있습니다. 적어도 내가 그랬어. – Christoffer

+3

@Christoffer 당신이 내 목숨을 구해 줬습니다, 고마워요. 그것은 치명적인 문제입니다, 그래서 나는 주석을 쓰고 강조를하고 싶습니다. –

4

+1

다중 값 관계를 다루기 위해'.distinct()'호출을 요구하지 않기 때문에 이것은 받아 들인 대답보다 낫다. – Dan