总喜欢用户的所有帖子

时间:2018-06-06 16:14:13

标签: python django

如何统计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

1 个答案:

答案 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')) )访问帖子作者的总喜欢。