2011-01-11 9 views
1

私には2つのモデルがあります。 Artistモデル、Albumモデルです。アルバムには複数のアーティスト(コラボレーションなど)が存在する可能性があるので、2つを接続するのは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人のアーティストが(注釈を付けることとフィルタリングすることによって)すべてのアルバムを見つけてフィルタリングすることです。

関連する問題