Шаблон 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-шаблона мне нужно получить общий подсчет количества артистов на каждом концерте, связанном с событием. (См. рисунок)Sample scenario (red is what I'm looking for)

Итак, 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 %}
Вернуться на верх