1

Suppose

class Comment(models.Model):
    ...
    likes = models.ManyToManyField(User,...)
class Post
    ...
    content = models.CharField(...)
    likes = models.ManyToManyFiled(User,...)
    comment = models.ManyToManyField(Comment,...)

Now if I run

Statement1

Post.objects.annotate(likecount=Count('likes')).values('content','likecount')

Output:

<QuerySet [{'content': 'delta', 'likecount': 3}, {'content': 'gamma', 'likecount': 6}, {'content': 'beta', 'likecount': 7}, {'content': 'alpha', 'likecount': 3}]>

Statement2

Post.objects.annotate(commentlikecount=Count('comment__likes')).values('content','commentlikecount')

Output:

<QuerySet [{'content': 'delta', 'commentlikecount': 6}, {'content': 'gamma', 'commentlikecount': 0}, {'content': 'beta', 'commentlikecount': 3}, {'content': 'alpha', 'commentlikecount': 0}]>

Statement3

Post.objects.annotate(likecount=Count('likes'),commentlikecount=Count('comment__likes')).values('content','likecount','commentlikecount')

Output:

<QuerySet [{'content': 'delta', 'likecount': 18, 'commentlikecount': 18}, {'content': 'gamma', 'likecount': 6, 'commentlikecount': 0}, {'content': 'beta', 'likecount': 21, 'commentlikecount': 21}, {'content': 'alpha', 'likecount': 3, 'commentlikecount': 0}]>

Why the output of third statement is this instead of

<QuerySet [{'content': 'delta', 'likecount': 3, 'commentlikecount': 6}, {'content': 'gamma', 'likecount': 6, 'commentlikecount': 0}, {'content': 'beta', 'likecount': 7, 'commentlikecount': 3}, {'content': 'alpha', 'likecount': 3, 'commentlikecount': 0}]>

How can i have this as output?

RoyalBosS
  • 350
  • 3
  • 13

0 Answers0