Как посчитать количество экземпляров подкласса в Python?

-1

Я пытаюсь создать веб-сайт, на котором вы можете воспроизводить песни из разных альбомов. Я думаю, что все работает нормально, но я застрял только в одном. В деталях альбома я также хотел отобразить количество содержащихся в нем песен.

Вот мои модели:

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
    Это не имеет ничего общего с подклассами.
Теги:
class
django-models
subclass

2 ответа

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 будет доступен каждому объекту в 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/

0

Вы можете фильтровать, а затем подсчитывать количество песен, указывая идентификатор альбома этого конкретного альбома.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню