如何计算python中子类的实例数?

时间:2017-09-02 13:37:28

标签: python django class django-models subclass

我正在尝试创建一个网站,您可以在其中播放来自不同相册的歌曲。 我觉得一切都很好,但我只是坚持一件事。在专辑的细节中,我还想显示它包含的歌曲数量。

以下是我的模特:

from django.contrib.auth.models import Permission, User
from django.db import models


class Album(models.Model):
    user = models.ForeignKey(User, default=1)
    artist = models.CharField(max_length=250)
    album_title = models.CharField(max_length=500)
    genre = models.CharField(max_length=100)
    album_logo = models.FileField()
    is_favorite = models.BooleanField(default=False)

    def __str__(self):
        return self.album_title + ' - ' + self.artist


class Song(models.Model):
    album = models.ForeignKey(Album, on_delete=models.CASCADE)
    song_title = models.CharField(max_length=250)
    audio_file = models.FileField(default='')
    is_favorite = models.BooleanField(default=False)

    def __str__(self):
        return self.song_title

如何在专辑详细信息中显示歌曲数量?

2 个答案:

答案 0 :(得分:1)

您可以注释当前用于检索相册的查询集中的歌曲数量:

from django.db.models import Count

album_qs = Album.objects.filter(...) # your queryset
album_qs = album_qs.annotate(num_of_songs=Count('song'))
查询集中的每个对象都可以访问

num_of_songs,就像任何其他模型字段一样:

for album in album_qs:
    print(album.artist)
    print(album.num_of_songs) # use-case

参考:

<强> https://docs.djangoproject.com/en/1.11/topics/db/aggregation/

答案 1 :(得分:0)

您可以通过提供该特定专辑的专辑ID来过滤然后计算歌曲数量。

total_songs = Song.objects.filter(album__id='albumid').count()