1

我有一个游戏的 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 Level 2: requiredPoints: 800 Level 3: requiredPoints: 2000

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

在 sql 它看起来像

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

有小费吗?我必须使用额外的 Query-Set吗?它会是什么样子

4

1 回答 1

2

我不认为你的 SQL 是正确的。如果参数是 1999,它应该返回“级别 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
于 2012-07-12T16:48:31.907 回答