python - 在 QuerySet 中获得排名的最有效方法是什么?

标签 python mysql django

我正在尝试有效地对 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/

相关文章:

iphone - 如何将 XML POST 数据从 iOS 应用程序发送到 Django 应用程序?

python - Django 中的自定义默认文件存储

python - Pandas .dt.hour 格式

php - 在 PHP 中使用多个 AND 时出现 MYSQL 语法错误

python - 相互 SSL 身份验证 - 客户端和服务器端。 Python -> Django/Twisted/ Tornado

mysql - 如何让我的 GTFS 查询运行得更快?

mysql - 在 Wamp 上安装 MySQL 插件

python - Python和Matlab上仿射变换的不同结果

python - python中输出-1或0或1的函数

python - 将数百个数据文件合并到一个主 DataFrame 中的有效方法是什么?