django - 查询给定值的最接近的数值

时间:2012-07-12 16:38:34

标签: django absolute

我有一个游戏的django模型等级。

class Level(models.Model):

key = models.CharField(max_length=100)
description = models.CharField(max_length=500)
requiredPoints = models.IntegerField()
badgeurl = models.CharField(max_length=100)
challenge = models.ForeignKey(Challenge)

我现在想要使用小于给定值的pointsRequired值来查询最高级别。

如果我有:

等级1:requiredPoints:200 第2级:requiredPoints:800 3级:requiredPoints:2000

当我输入例如900或1999作为查询参数,我想要返回级别2,当输入10000时它应该是级别3。

在sql中它看起来像

select   pointsRequired,
abs(pointsRequired - parameter) as closest
from     the_table
order by closest
limit 1

任何提示?我必须使用extra Query-Set吗?它会是什么样子

1 个答案:

答案 0 :(得分:2)

我不认为你的SQL是正确的。如果参数是1999,它应该返回'level 3'。根据你的描述,SQL可以是:

SELECT pointsRequired FROM the_table WHERE pointsRequired < parameter ORDER BY pointsRequired DESC LIMIT 1;

或者在Django:

try:
    Level.objects.filter(requiredPoints__lt=parameter).order_by('-requiredPoints')[0]
except IndexError: 
    # Do something