用户名未显示,但用户 id 显示在 Django 的 html 模板中

问题描述

下面是我的模型:

class Problem_Solved(models.Model):
    user_ref = models.ForeignKey(User,on_delete=models.CASCADE)
    contest_ref = models.ForeignKey(Contest,on_delete=models.CASCADE)
    problem_ref = models.ForeignKey(Problem,on_delete=models.CASCADE)
    points_get = models.IntegerField(default=0)
    time_submitted = models.DateTimeField('date published')
    
    class Meta:
        unique_together = (("user_ref","problem_ref"))
        

    def __str__(self):
        return self.user_ref.username + " solved " + self.problem_ref.problem_name + " and got " + str(self.points_get) + " marks " 

下面是我的视图函数

def pointtable(request,contest_id):
    context = {}
    contest_obj=Contest.objects.get(pk=contest_id)
    points_list = Problem_Solved.objects.filter(contest_ref = 
      contest_obj).values('user_ref').annotate(user_sum = Sum('points_get')).order_by('-user_sum')
    print(points_list)
    context['points_list'] = points_list
    return render(request,'leaderboard.html',context)

下面是我的HTML代码

{% for pt in points_list %}
            <div class="container-sm w-75  tb-bg-color">
                <div class="row mb-3 ">
                    <div class="col-1 themed-grid-col col-border">{{forloop.counter}}</div>
                    <div class="col-6 themed-grid-col col-border">{{pt.user_ref.username}}</div>
                    <div class="col-2 themed-grid-col col-border">{{pt.user_sum}}</div>
                </div>
            </div>
    {% endfor %}

下面是输出

Username is not showing

图片中可以清楚地看出,用户名没有显示,但如果我在我的 html 代码中写入 pt.user_ref 那么它将打印 user_id,如下所示:

User id is showing

现在我想要用户名而不是用户 ID,我应该怎么做,因为我从 2 天开始就被困住了。如果可以,请帮助我。

解决方法

由于您希望每个用户的点数在 User 模型上进行注释,这样您将获得一个 User 对象的查询集,因此您可以简单地获取用户名:

def pointtable(request,contest_id):
    context = {}
    contest_obj=Contest.objects.get(pk=contest_id)
    contest_users = User.objects.filter(
        problem_solved__contest_ref = contest_obj
    ).annotate(
        point_sum=Sum('problem_solved__points_get')
    ).order_by('-point_sum')
    context['contest_users'] = contest_users
    return render(request,'leaderboard.html',context)

现在您的 html 将是:

{% for contest_user in contest_users %}
    <div class="container-sm w-75  tb-bg-color">
        <div class="row mb-3 ">
            <div class="col-1 themed-grid-col col-border">{{forloop.counter}}</div>
            <div class="col-6 themed-grid-col col-border">{{contest_user.username}}</div>
            <div class="col-2 themed-grid-col col-border">{{contest_user.point_sum}}</div>
        </div>
    </div>
{% endfor %}

注意:类名中不应包含下划线。所以 ProblemSolved 而不是 Problem_Solved

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...