2011-01-11 81 views
1

我有兩種模式。一個Artist模型和一個Album模型。有一個ManyToManyField連接這兩個,因爲一個專輯可以有多個藝術家(合作等)。多對多關係:使用單個值查詢對象

我遇到的問題是,當我執行一個簡單的Album.objects.filter(artists=1)類型的查詢時,它預計顯示所有具有該藝術家歸因於它的對象Album。我想要做的是找到那個藝術家是唯一的藝術家的所有專輯(他們的發佈,沒有合作)。

(我不熟悉extra()條款,但我敢肯定它可能有一些做的解決方案,這一點,所以在爲此任何的幫助深表感謝。)

回答

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

基本上這個想法是找到所有擁有1位藝術家的專輯(通過註釋和過濾),然後過濾掉。