[英]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.