我正在使用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)
但我不知道如何考虑时间价值。
你可以试试:
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
1
my_article
的主键,15
threshold
。