我有一个游戏的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吗?它会是什么样子
答案 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