繁体   English   中英

如何编写Django ORM查询来搜索一个接近但未超过某个特定值的值?

[英]How do I write a Django ORM query that searches for a value that is close but doesn't exceed a certain other value?

我正在将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)

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

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

使用my_article的主键1threshold 15

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM