Issue
I am building a BlogApp and I am trying to create a notification
when a particular tag
is used 10 times.
So i am using if statement
in for loop
so if any tag used 10 times then create notification
But when i try to count
then it is showing
'Tag' object has no attribute 'count'
models.py
class Post(models.Model):
post_user = models.ForeignKey(User, on_delete=models.CASCADE)
psot_title = models.CharField(max_length=30)
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post_of = models.ForeignKey(Post, on_delete=models.CASCADE)
views.py
def page(request):
subquery = Tag.objects.filter(post__post_user=request.user).annotate(
num_name=Count('name')
for que in subquery:
if que.count() > 10:
Notification.objects.create(user=request.user)
context = {'subquery':subquery}
return render(request, 'page.html', context}
What have i tried :-
I also tried len
like :-
for que in subquery:
if len(que) > 10:
Notification.objects.create(user=request.user)
But it showed
object of type 'Tag' has no len()
I have tried many times by removing count()
and len()
but it showed
'int' object has no attribute 'name'
If I use count()
in query then it will count in all tags But i am trying to check every tag.
Any help would be much Appreciated. Thank You
Solution
You're using annotations in your query to add the count information onto the Tag
object, e.g.
.annotate(num_name=Count('name')
This calculates the count of name
and annotates the tag object with that value. To access this count for a given tag, you then need to use:
tag.num_name
So, in your code:
for que in subquery:
if que.num_name > 10:
Notification.objects.create(user=request.user)
Answered By - mfitzp
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.