I am building a simple Blog App and I am trying to implement a feature.
In which, If a user commented on a post with post tags
- tag1, tag2
.
And I will retrieve the Tags of which user commented on post
And i am trying to count Number of times a user commented on a post with same tag
Like I am trying to show :-
Tag Name | Number of times used |
---|---|
tag1 | 16 Times |
tag2 | 10 Times |
tag3 | 8 Times |
This table is showing :- User commented on a post with the tag which was used in previous post.
For Example :-
A new user named "user_1" commented on a Post with tags tag5
, tag6
, tag8
then A query
will show that user_1
has commented on post tags 1 times in tag5
, 1 time in tag6
and 1 time in tag8
.
And I will do the rest later.
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)
This view is showing tags which are used in post
which were commented by request.user
like :-
tag1
tag2
tag2
But I have no idea, How can i annotate so it can show number of used tags which were on post commented by request.user
like above table.
Any help would be much Appreciated. Thank You.
Note :- I am using Django-Taggit for Tags
(TaggableManager()
in BlogPost Model)
CodePudding user response:
I think using blogpost__user
would cause the tag to be filtered by (I assume) the author of the BlogPost
instead of the commenter, so I think you would want to use blogpost__comment__comment_by
?
With that you can annotate on the count of tags like this:
Tag.objects.filter(
blogpost__comment__comment_by=request.user
).values(
'name'
).annotate(
times_used=Count('name')
)