django模板中查询集的简单排名

gro*_*wse 4 django django-queryset rank

我在一个简单的django应用程序中有一个模型,记录了参加比赛的人的分数.我有两个模型对象,Entry和Person.每个条目都有一个人,一个人有多个条目.

我想生成一个页面,显示每个用户,他们的总分和他们的排名.

我到目前为止的命令如下:

Entry.objects.values('person__name').annotate(total=Sum('score')).order_by('-total')
Run Code Online (Sandbox Code Playgroud)

我可以使用for块很好地将结果输出到页面上.我唯一没有得到的是排名.

向每条记录添加记录的数字排名的最佳方法是什么,包括当两个分数相同时,排名反映这一点(即"4 =")?尝试使用forblock.counter和一些先行/后置机制在模板中执行此操作会更好,还是尝试将此字段用于查询本身?

Dan*_*man 7

这种事情非常棘手.我实际上会在视图中完成所有工作,在那里修改查询集并将其传递给模板.

rank = 1
previous = None
entries = list(entries)
previous = entries[0]
previous.rank = 1
for i, entry in enumerate(entries[1:]):
    if entry.value != previous.value:
        rank = i + 2
        entry.rank = str(rank)
    else:
        entry.rank = "%s=" % rank
        previous.rank = entry.rank
    previous = entry
Run Code Online (Sandbox Code Playgroud)