[英]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_time
对QuerySet
进行排序,然后选择第一个,例如:
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
的主键1
和threshold
15
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.