Как подсчитать объекты из 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
объектов.