つまり、2 つのモデルがPerson
ありFilm
、それらが多対多の関係にあります。私の目標は、映画を手に入れて、少なくとも 10 本の映画にも出演した人物を出力することです。
たとえば、次の方法で個別にカウントを取得できます。
>>> Person.objects.get(short__istartswith = "Matt Damon").film_set.count()
71
ただし、特定の映画のすべての俳優を除外しようとすると、次のようになります。
>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film')).filter(film_count__gte=10)
[]
film_count
マット・デイモン (上記のように) などの俳優が私のデータベースで 71 の映画に出演しているにもかかわらず、手動で全員を見ると 1 であるため、空のセットを返します。
このクエリでわかるように、注釈は機能しません。
>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film'))[0].film_count
1
>>> Film.objects.get(name__istartswith="Saving Private Ryan").actors.all().annotate(film_count=Count('film'))[0].film_set.count()
7
そして、私はそれをフィルタリングする方法を理解できないようですfilm_set.count()