Количество использованных в посте тегов, которые были прокомментированы пользователем

Я создаю простое приложение для блога и пытаюсь реализовать одну функцию.

В котором, Если пользователь прокомментировал сообщение с post tags - tag1, tag2. И я получу Tags of which user commented on post И я пытаюсь подсчитать Number of times a user commented on a post with same tag

Как я пытаюсь показать :-

Tag Name Number of times used
tag1 16 Times
tag2 10 Times
tag3 8 Times

Эта таблица показывает :- Пользователь прокомментировал сообщение с тегом, который был использован в предыдущем сообщении.

Пример :-

Новый пользователь "user_1" прокомментировал пост с тегами tag5, tag6, tag8, тогда A query покажет, что user_1 прокомментировал пост с тегами 1 times in tag5, 1 time in tag6 и 1 time in tag8. Остальное я сделаю позже.

models.py

class BlogPost(models.Model):
    user = models.ForeinKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30)
    tags = TaggableManager()

class Comment(models.Model):
    comment_by = models.ForeignKey(User, on_delete=models.CASCADE)
    on_post = models.ForeignKey(BlogPost, on_delete=models.CASCADE)

views.py

def examplePage(request):
    query = Tag.objects.filter(blogpost__user=request.user)

    context = {'query': query}
    return render(request, 'examplePage.html', context)

Это представление показывает теги, которые used in post были прокомментированы request.user, например :-

tag1

tag2

tag2

Но у меня нет идеи, как я могу сделать аннотацию, чтобы она показывала количество использованных тегов, которые были в посте, прокомментированном request.user, как в таблице выше.

Любая помощь будет очень признательна. Спасибо.

Примечание :- Я использую Django-Taggit для Tags (TaggableManager() в модели BlogPost)

Использование blogpost__user приведет к тому, что тег будет фильтроваться (я предполагаю) автором BlogPost вместо комментатора, поэтому я думаю, что вы захотите использовать blogpost__comment__comment_by?

С помощью этого вы можете сделать аннотацию по количеству тегов следующим образом:

Tag.objects.filter(
    blogpost__comment__comment_by=request.user
).values(
    'name'
).annotate(
    times_used=Count('name')
)
Вернуться на верх