Как подсчитать объекты из m2m-соединения

У меня проблема с пониманием того, как подсчитывать объекты из m2m соединения в django. Мне нужно получить количество фотографий в фотоальбоме. Вот моя модель альбома:

class PhotoAlbum(models.Model):
    title = models.CharField(verbose_name='Название альбома', max_length=50, null=True)
    created_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, verbose_name='Автор')
    created_at = models.DateTimeField(verbose_name='Дата создания', editable=False,
                                      default=datetime.datetime.today())
    photos = models.ManyToManyField('Photo', verbose_name='Фото', blank=True, related_name='photo_albums')
    number_of_photos = "something"

Как получить количество связанных с альбомом фотографий для каждого фотоальбома?

Нет необходимости хранить это в модели PhotoAlbum. Вы можете .annotate(…) [Django-doc] с:

from django.db.models import Count

PhotoAlbum.objects.annotate(num_photos=Count('photos'))

Объекты PhotoAlbum, возникающие в результате этого QuerySet будут иметь дополнительный атрибут .num_photos, который будет содержать количество связанных Photo объектов.

Вернуться на верх