如何在Django中获取查询的枚举结果?

2 投票
2 回答
1406 浏览
提问于 2025-04-15 19:06

我有一个查询,它会根据某个特定的字段对一个表格进行排序。这个表格和一个比赛有关,所以知道每个位置是很重要的。

因为这个表格可能会有很多行,所以我把它分页了(每页25行),使用的是通用视图。不过,我遇到的问题是如何在表格中显示编号的位置。这些信息是通过一个 order_by 条件生成的。

Result.objects.all().order_by('field')

由于我使用的是通用视图,这样可以方便地进行分页,所以我没有任何视图函数可以让我调整结果,比如使用 enumerate

起初,我想用 forloop.counter 来给位置编号,但问题是,当你展示第100页时,编号还是1, 2, 3, 4, 5...25,而不是2500, 2501, 2502...这样。

我看到有 annotate() 方法,想看看能否为每个结果添加它在总表中的位置,但似乎这个方法只添加一些统计数据,比如人数等等。

有没有办法为查询的每个结果添加它所占的位置呢?

2 个回答

0

如果不是在前端识别行,那为什么不直接用当前表的主键呢?

3

如果你在你的模板里,可以使用类似下面的代码:

{{ forloop.counter0|add:page.start_index }}

这里的 start_index 是分页的页面对象,它给你这个页面的起始索引,注意这个索引是从1开始的。当然,反过来写可能会更容易理解...

{{ page.start_index|add:forloop.counter0 }}

撰写回答