猿问

我如何编写一个 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)

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


holdtom
浏览 234回答 2
2回答

慕少森

你可以试试:PageStat.objects.filter(elapsed_time__lte=20)还有:lt - less than gte - greater than equalgt - greater thanetc

喵喔喔

您可以对QuerySetby进行排序elapsed_time,然后选择第一个,例如:slowest_pagestat = PageStat.objects.filter(&nbsp; &nbsp; article=my_article,&nbsp; &nbsp; elapsed_time__lte=threshold).order_by('-elapsed_time').first()PageState如果PageState存在,这将返回一个对象,None否则将返回。这将进行如下查询:SELECT pagestat.*FROM pagestatWHERE pagestat.article_id = 1AND&nbsp; &nbsp;pagestat.elapsed_time <= 15ORDER BY pagestat.elapsed_time DESCLIMIT 1用1的主键my_article,和15所述threshold。
随时随地看视频慕课网APP

相关分类

Python
我要回答