为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

holdtom 2021-10-10 16:40:07
我正在使用 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           101           201           302           15我用文章 ID“1”和经过时间“15”进行了搜索,我想找回第一行(其中 article_id = 1 和 elapsed_time = 10),因为“10”是最大值,它仍然更少比 15. 我知道如何写一个查询来查找文章的统计信息,PageStat.objects.filter(article=article)但我不知道如何考虑时间价值。
查看完整描述

2 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

你可以试试:


PageStat.objects.filter(elapsed_time__lte=20)

还有:


lt - less than 

gte - greater than equal

gt - greater than

etc


查看完整回答
反对 回复 2021-10-10
?
喵喔喔

TA贡献1735条经验 获得超5个赞

您可以对QuerySetby进行排序elapsed_time,然后选择第一个,例如:


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。


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信