我有一个包含points字段的Profile模型,如下所示:
class Profile(models.Model):
user = models.OneToOneField(User)
avatar = models.ImageField(default=None, null=True)
experience = models.IntegerField(default=10)
island = models.ForeignKey(Island, default=None, null=True)
fcm_token = models.CharField(max_length=255, default=None, null=True, unique=True)
points = models.DecimalField(default=0.0, max_digits=12, decimal_places=10)我想做的是根据用户的积分对用户进行排名。我可以使用一个简单的原始SQL查询来完成,如下所示-
select id, RANK() over (order by points desc) as rank from player_profile ;
这给出了以下输出-
id | rank
----+------
1 | 1
2 | 2
3 | 2
4 | 2
(4 rows)初始数据是-
id | avatar | experience | fcm_token | user_id | island_id | points
----+--------+------------+-----------+---------+-----------+--------------
2 | | 10 | | 3 | 4 | 0.0000000000
3 | | 10 | | 4 | 3 | 0.0000000000
4 | | 10 | | 5 | 1 | 0.0000000000
1 | | 10 | | 2 | 3 | 5.1010101010
(4 rows)问题是我无法使用Django的ORM编写等价的查询
发布于 2017-03-02 01:11:31
Django <=1.10不允许用纯Python表达窗口函数。
但是,可以将Python代码和原始SQL结合起来以获得所需的结果。
在堆栈溢出中已经解释了使用窗口函数的用例,请看一下:Clean way to use postgresql window functions in django ORM?
https://stackoverflow.com/questions/42537427
复制相似问题