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

用户名未显示,但用户id显示在Django的html模板中,django,django-templates,django-queryset,django-annotate,django-aggregation,Django,Django Templates,Django Queryset,Django Annotate,Django Aggregation,以下是我的模型: 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

以下是我的模型:

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 %}
{点列表%中pt的百分比}
{{forloop.counter}
{{pt.user\u ref.username}
{{pt.user_sum}
{%endfor%}
以下是输出:

如图所示,用户名未显示,但如果我在html代码中写入pt.user\u ref,它将打印用户id,如下所示:


现在我想要的是用户名,而不是用户id我应该怎么做,因为我已经被困在这两天了。如果可以,请帮助我。

由于您希望在
用户
模型上标注每个用户的点数,因此通过这种方式,您将获得
用户
对象的查询集,因此您可以简单地获取用户名:

def pointtable(请求、竞赛id):
上下文={}
contest\u obj=contest.objects.get(pk=contest\u id)
contest_users=User.objects.filter(
问题\已解决\竞赛\参考=竞赛\目标
).注释(
点总和=总和('问题得到解决点得到点')
).order_by('-点_和')
上下文['contest_users']=contest_users
返回呈现(请求,'leadboard.html',上下文)
现在,您的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 %}
{竞赛用户%中竞赛用户%}
{{forloop.counter}
{{contest_user.username}
{{contest\u user.point\u sum}
{%endfor%}
注意:类名中不应包含下划线。所以
问题解决了
而不是
问题解决了


显示您的用户模型您已使用
值执行分组依据。这将返回一个值字典,其中包含由其ID表示的外键(这就是为什么用户名没有显示的原因)。我还没有创建用户模型。我使用了DjnagoOkay@AbdulAzizBarkat提供的默认用户模型,但如果我删除了值,那么它就不会计算用户的积分总和。有没有其他方法可以显示用户名?