Django: Вложенный цикл for не работает должным образом

У нас есть две таблицы, которые имеют отношения "многие к одному".

в models.py :

class Author(models.Model):
    name     = models.CharField(max_length=100, null=False)
    username = models.CharField(max_length=35, null=False)

    def __str__(self):
        return self.name

class Article(models.Model):
    CATEGOTY = (
        ('programming', 'programming'),
        ('other', 'other')
    )

    title    = models.CharField(max_length=100, null=False)
    content  = models.TextField(null=False)
    category = models.CharField(max_length=100, choices=CATEGOTY, null=False)
    creation = models.DateTimeField(auto_now_add=True)
    author   = models.ForeignKey(Author, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

and in views.py:

def articles(request):
    authors                = Author.objects.all()
    articles               = Article.objects.all()
    totalArticles          = articles.count()
    authorAticles = Author.objects.annotate(numberOfArticles=Count('article'))

    return render(request, 'articles/article.html', {
        'articles'     : articles,
        'authors'      : authors,
        'totalArticles': totalArticles,
        'authorAticles': authorAticles
        })

и html-код:

<div class="container mb-3 p-3" id="author-aricle">
    <div class="row">
        <div class="col-sm">
            totle articles: {{totalArticles}}
        </div>
        {% for author in  authors %}
            <div class="col-sm">
                {{author}}: 
                {% for authorAticle in authorAticles %}
                    {{authorAticle.numberOfArticles}}
                {% endfor %}
                articles
            </div>
        {% endfor %}
    </div>
</div>

Я хочу, чтобы html-вывод отображал количество статей каждого автора рядом с его именем. Это означает, сколько статей у каждого автора? Я хочу, чтобы html-вывод выглядел следующим образом:

автор1: 2 статьи

автор2: 3 статьи

автор3: 3 статьи

etc

но этого не происходит, и на выходе получается:

автор1: 3 3 2 статьи

автор2: 3 3 2 статьи

автор3: 3 3 2 статьи

Проблема в том, что authorAticles = Author.objects.annotate(numberOfArticles=Count('article')) возвращает Авторов, а не Статьи, и не их количество. Поэтому далее здесь:

{{author}}: 
{% for authorAticle in authorAticles %}

Для каждого автора выполняется итерация по всем авторам.

Что-то вроде {{ author.article_set.count }} должно работать, чтобы подсчитать их все для каждого автора.

Или, если вы предпочитаете использовать annotate, просто добавьте его в фильтрацию авторов:

authors = Author.objects.annotate(numberOfArticles=Count('article'))

и затем ссылаться на него в шаблоне:

{{ author }}:
{{ author.numberOfArticles }}
Вернуться на верх