2011-01-28 4 views
13

관계를 설명하는 many-to-many 필드가있는 상호 연관된 Django 모델의 왜곡 된 미로가 있습니다.Django QuerySet에서 관련된 모든 many-to-many 객체 얻기

QuerySet에서 관련 모델의 고유 멤버 목록을 가져 오는 가장 깨끗한 방법은 무엇입니까?

Groups 모델을 가리키는 그룹 ManyToMany가있는 항목 모델이있는 경우.

내가 '항목'의 항목의 검색어 세트가있는 경우, 어떻게이받을 수 있나요 :

groups = items[0].groups.all().values_list('name', flat=True) 

그러나 전체 집합에 대한

? 나는 그들 모두를 반복하고 set(). intersect()를해야합니까?

답변

17

하나의 해결 방법은 2 개의 쿼리를 사용하는 것입니다.

반대쪽 관계를 사용하여 GroupitemsItem이 가리키는 모든 검색어를 쿼리 할 수 ​​있습니다.

groups = groups.objects.filter(item__in=items).distinct().values_list('name', flat=True) 
+0

충분히 우아합니다. 감사. – samurailawngnome

+2

'flat = True'를'values_list'의 매개 변수로 사용하는 것이 유용 할 것입니다.'values_list'는 이름의 튜플 목록이 아닌 이름 목록으로 결과를 반환합니다. – gorus

+0

@gorus - updated. 나는 그것이 뚜렷하게 혼동되기 때문에 원래 게시물에서 플랫을 제거한 것이 재미 있다는 것을 알았습니다. –

관련 문제