Django подсчет с использованием в списке объектов

У меня есть две модели - Book и Tags, связанные ManyToMany. После фильтрации списка книг я хочу получить список тегов, используемых в этих книгах, и количество для каждого тега.

class Tag(models.Model):
    name = models.CharField(max_length=255)
    description = models.CharField(max_length=255)
    type = models.CharField(max_length=255, default='tag')
    is_showing = models.BooleanField()
    using_count = models.IntegerField(default=0)

    def __str__(self):
        return self.name

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['name', 'type'], name='unique_migration_host_combination'
            )
        ]

    @property
    @lru_cache
    def count(self):
        cnt = self.book_set.count()
        return cnt

class Book(models.Model):
    name = models.CharField(max_length=255)
    tag = models.ManyToManyField(Tag)

    def __str__(self):
        return self.name

    @property
    def tags_count(self):
        return self.tag.filter(type='tag').count()

    @property
    def genres_count(self):
        return self.tag.filter(type='genre').count()

    @property
    def fandoms_count(self):
        return self.tag.filter(type='fandom').count()

В прошлый раз я вручную вытаскивал список тегов из каждой книги и заносил их в словарь, после чего получал словарь количества использованных тегов, что было не очень удобно для использования в шаблонизаторе django

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