我正在尝试创建一个网站,您可以在其中播放来自不同相册的歌曲。 我觉得一切都很好,但我只是坚持一件事。在专辑的细节中,我还想显示它包含的歌曲数量。
以下是我的模特:
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
如何在专辑详细信息中显示歌曲数量?
答案 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()