2011-01-11 2 views
1

두 모델이 있습니다. Artist 모델 및 Album 모델입니다. 앨범에는 둘 이상의 아티스트 (공동 작업자 등)가있을 수 있기 때문에 둘을 연결하는 파일은 ManyToManyField입니다.다 대다 관계 : 단일 값 가진 개체 쿼리

간단한 Album.objects.filter(artists=1) -type 쿼리를 수행 할 때 발생하는 문제는 해당 아티스트의 속성이있는 Album 개체를 모두 예상 한 것입니다. 내가하고 싶은 일은 그 아티스트가 유일한 아티스트 (릴리스, 공동 작업 없음) 인 모든 앨범을 찾는 것입니다.

(필자는 extra() 절에 익숙하지 않은,하지만 난 그것이에 대한 해결책 함께 할 수있는 뭔가가있을거야, 그래서 그 말에 어떤 도움을 많이 감사합니다.)

답변

4
Album.objects.annotate(n_artists=Count("artists')).filter(n_artists=1).filter(artist=some_awesome_artist) 

기본적으로 아이디어는 정확히 1 명의 아티스트 (주석 달기 및 필터링)를 가진 모든 앨범을 찾은 다음 필터링하는 것입니다.