我正在尝试有效地对 QuerySet 进行排名(将其保留为 QuerySet 以便我可以保留 filter 和 order_by 函数),但似乎找不到任何其他方法来遍历 QuerySet 并确定排名。如果没有必要,我不想为我的模型添加排名。
我知道如何通过 SQL 查询获取所需的值,但似乎无法将其转换为 Django:
SET @rank = 0, @prev_val = NULL;
SELECT rank, name, school, points FROM
(SELECT @rank := IF(@prev_val = points, @rank, @rank+1) AS rank, @prev_val := points, points, CONCAT(users.first_name, ' ', users.last_name) as name, school.name as school
FROM accounts_userprofile
JOIN schools_school school ON school_id = school.id
JOIN auth_user users ON user_id = users.id
ORDER BY points DESC) as profile
ORDER BY rank DESC
我发现,如果我确实遍历 QuerySet 并手动添加“排名”,然后进一步过滤结果,我的“排名”就会消失——除非将它变成一个列表(这使得过滤和排序有点困难)疼痛)。您是否可以想到任何其他方法来为我的 QuerySet 添加排名?有什么办法可以执行上述查询并获得一个带有 filter 和 order_by 函数的 QuerySet 仍然完好无损吗?我目前正在使用带有 Django 的 jQuery DataTables 来生成带分页的排行榜(这就是为什么我需要保留过滤和 order_by)。
提前致谢!抱歉,如果我没有正确发布我的问题 - 任何帮助将不胜感激。
最佳答案
我自己没用过,但我很确定你可以用 extra() 做到这一点方法。
关于python - 在 QuerySet 中获得排名的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11129984/