如何统计django中特定用户的所有帖子的总喜欢? 我还添加了html和views.py。我想在html中显示低于帖子总数的总喜欢数量。感谢
models.py
class Post(models.Model):
author = models.ForeignKey(User, on_delete = models.CASCADE, related_name='posts')
slug =models.SlugField(unique=True, blank=True, default=uuid.uuid1)
likes =models.ManyToManyField(User, blank=True, related_name='post_likes')
def __str__(self):
return self.title
答案 0 :(得分:2)
您可以使用.aggregate(..)
,例如:
from django.db.models import Count
def total_likes_received(user):
return user.posts.aggregate(total_likes=Count('likes'))['total_likes'] or 0
所以我们在这里使用posts
的{{1}}相关对象管理器,然后我们执行聚合,我们计算user
s组的喜欢数量,我们将其附加到Post
密钥。
然后我们用total_likes
打开该键的值,但这里仍然存在问题。如果用户没有帖子或没有喜欢的帖子,则该值不是...['total_likes']
,而是0
。我们可能不希望这样,这就是我们最后添加None
的原因。
如果你想要计算某个用户喜欢给的数量(那么不本身由该用户编写的帖子),那么你可以使用方法:
or 0
def total_likes_given(user):
return user.post_likes.count()
我们可以使用ListView
属性注释每个帖子,例如:
total_likes
然后我们可以通过class PostListView(ListView):
model = Post
context_object_name = 'post_list'
def get_queryset(self):
return (Post.objects.filter(published_date__lte=timezone.now())
.order_by('-published_date')
.annotate(author_total_likes=Count('author__post__likes'))
)
访问帖子作者的总喜欢。