用户名未显示,但用户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提供的默认用户模型,但如果我删除了值,那么它就不会计算用户的积分总和。有没有其他方法可以显示用户名?