【问题标题】:Getting duplicate users in leaderboard在排行榜中获取重复用户
【发布时间】:2021-01-13 18:01:48
【问题描述】:

我正在尝试通过计算他们帖子的点赞数并对其进行排序,从而为最受点赞的用户创建排行榜。

但是,如果用户有 2 个或更多帖子,它将在排行榜中复制该用户以及他拥有的总点赞数。有没有办法来解决这个问题?谢谢。

models.py:

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    post_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    content = models.TextField(max_length=1500, verbose_name='Content')
    likes = models.ManyToManyField(User)

views.py:

def top_user(request):
    top_user = Post.objects.annotate(total_likes=Count('user__post__likes')).order_by('-total_likes')
    context = {'users': top_user}
    return render(request, 'blog/top_user.html', context)

html:

{% for top in users %}
   <h5>{{ top.user }}</h5> 
   <p>Upvotes: {{ top.total_likes }}</p>     
{% endfor %}

【问题讨论】:

    标签: python django


    【解决方案1】:

    你查询的方式不对,你这里出现的top_usersPosts,所以这意味着个帖子,你计算该作者的总点赞数。但是如果一个作者有很多帖子,它们就会出现多次。

    因此您应该注释用户:

    top_user = <b>User</b>.objects.annotate(<b>total_likes=Count('post__likes')</b>).order_by('-total_likes')

    因此渲染它:

    {% for user in users %}
       <h5>{{ user }}</h5>
       <p>Upvotes: {{ user.total_likes }}</p>
    {% endfor %}

    【讨论】:

    • 非常感谢威廉爵士!没想到用户本身..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多