2. Songsモデル
次に。曲名が書かれたモデルを作ります。
ちょっと年がばれそうですが、、個人的に印象が残った曲を中心にモデルを作っていきます。

実際にコードを書いていきましょう。まずはモデルの作成です。
[コード]
class Singer(models.Model):
name = models.CharField(max_length=100)
debut = models.IntegerField()
member = models.TextField()
class Songs(models.Model):
song = models.TextField()
singer = models.Foreignkey(Singer, on_delete=models.CASCADE)
次に、annotateを使ったコードを書いていきましょう。
[コード]
-views.py
1 from .models import Count
2 from django.http import HttpResponse
3 def songcount(request):
4 annotated_singers = Singer.objects.annotate(number_of_songs=Count('songs'))
5 print(annotated_singers)
6 return HttpResponse('')
[コードの解説]
(1) 4行目に注目してください。annotated_singersという変数を作っていますが、この変数に入れている情報は、SingerモデルのSongsモデルの数です。
SongsはForeignKeyでSingerモデルと紐づいていますので、一つ一つのsongsオブジェジェクトは、Singerモデルのいずれかのオブジェクトに含まれることになります。
このコードを実行すると、print関数でannotated_singersが出力されるのですが、出力される結果は以下の通りです。
[アウトプット]
<QuerySet [<Singer: サザンオールスターズ>, <Singer: SMAP>, <Singer: Superfly>]>
これは、annotateされた状態でQuerysetとしてデータが作成された状態です。
これでは歌手毎の歌の数が分かりませんので、歌の数を出力していきましょう。
print(annotate_singers)の部分をprint(annotated_singers[0].number_of_songs)に変えます。
ここで、annotated_singers[0]はQuerysetの最初のデータ、すなわちサザンオールスターズを示しています。
そして、number_of_songs属性にsongsの数(すなわち、サザンオールスターズの歌の数)が入っていますので、上記のコードで出力することにより、サザンオールスターズの歌の数が出力されます。
出力結果は以下のようになります。
このように、関連付けられたモデルの数を数えることができますので、ぜひannotateの使い方をマスターしましょう。