Я пытаюсь создать веб-сайт, на котором вы можете воспроизводить песни из разных альбомов. Я думаю, что все работает нормально, но я застрял только в одном. В деталях альбома я также хотел отобразить количество содержащихся в нем песен.
Вот мои модели:
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
Как отобразить количество песен в реквизитах альбома?
Вы можете аннотировать количество песен в текущем наборе запросов, которое вы используете для извлечения альбомов:
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
будет доступен каждому объекту в 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/
Вы можете фильтровать, а затем подсчитывать количество песен, указывая идентификатор альбома этого конкретного альбома.
total_songs = Song.objects.filter(album__id='albumid').count()