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