簡體   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