如何编写一个 Django ORM 查询来搜索接近但不超过某个其他值的值?



我正在使用Python 3.7和Postgres 9.5。 如果可能的话,我想写一个Django ORM查询。 我有以下型号

class PageStat(models.Model):
    article = models.ForeignKey(Article, on_delete=models.CASCADE, )
    elapsed_time = models.IntegerField(default=0)
    score = models.IntegerField(default=0)
我想做的是编写一个查询,

对于给定的文章和经过的时间(以秒为单位的整数),我想编写一个查询,该查询返回具有不超过参数的最大已用时间值的 PageStat 对象。 因此,例如,如果我的表具有这些值

article_id      elapsed_time
==================
1           10
1           20
1           30
2           15
我用文章 ID "1"和经过的时间"15"

进行了搜索,我想返回第一行(其中 article_id = 1 和 elapsed_time = 10),因为"10"是仍然小于 15 的最大值。 我知道如何编写查询以查找文章的统计信息,

PageStat.objects.filter(article=article)

但我不知道如何考虑时间价值。

你可以试试:

PageStat.objects.filter(elapsed_time__lte=20)

还有:

lt - less than 
gte - greater than equal
gt - greater than
etc

您可以按elapsed_timeQuerySet进行排序,然后选择第一个,例如:

slowest_pagestat = PageStat.objects.filter(
    article=my_article,
    elapsed_time__lte=threshold
).order_by('-elapsed_time').first()

如果存在此类PageState,这将返回PageState对象,否则None

这将创建一个如下所示的查询:

SELECT pagestat.*
FROM pagestat
WHERE pagestat.article_id = 1
AND   pagestat.elapsed_time <= 15
ORDER BY pagestat.elapsed_time DESC
LIMIT 1

1 my_article的主键,15 threshold

相关内容

最新更新