Шаблон Django подсчет отношений второго порядка
Я использую реляционную базу данных через Django Models и имею следующие классы:
class EventSite(models.Model):
name = models.CharField(....etc.)
class Artist(models.Model):
jobsite = models.ForeignKey(JobSite, related_name="jobsite", null=True....etc.)
is_british = models.BooleanField(default=False)
class Concert(models.Model):
event = models.ForeignKey(EventSite, related_name="event_concert", null=True....etc.)
artists = models.ManyToManyField(Artist, related_name="artist_conerts", null=True....etc.)
Итак, каждый концерт связан с сайтом события и может иметь несколько исполнителей. Внутри моего html-шаблона мне нужно получить общий подсчет количества артистов на каждом концерте, связанном с событием. (См. рисунок)
Итак, html, который я пробовал, выглядит примерно так:
{% for site in event_sites %}
{{site.event_concert.all.artists.count}},
{% endfor %}
Для моего сценария, я надеюсь, что это будет отображаться для пользователя:
12,3,0
но сейчас он просто возвращает пустую строку.
Я не могу найти решение, что, как я подозреваю, связано с тем, что у меня нет правильной терминологии для описания того, что я пытаюсь получить. В некоторых сценариях мне также придется считать только британских артистов. Любая помощь будет очень признательна!
Я могу думать о том, чтобы сделать это двумя способами в представлениях или в моделях. Я бы сделал это, создав метод в модели.
...
class EventSite(models.Model):
name = models.CharField(max_length=100)
def get_site_artists(self):
artists = 0
for concert in self.event_concert.all():
artists += concert.artists.all().count()
return artists
...
А затем используйте его в шаблоне следующим образом:
{% for site in event_sites %}
{{site.get_site_artists}},
{% endfor %}