Количество использованных в посте тегов, которые были прокомментированы пользователем
Я создаю простое приложение для блога и пытаюсь реализовать одну функцию.
В котором, Если пользователь прокомментировал сообщение с 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')
)