我正在阅读这篇关于分页的blog,但我正在尝试通过create date time进行快速查询。例如,如果我收到一个请求,其中一个参数是date time,我想要一种快速的方法来按顺序获得下一个创建的X个帖子。我不能使用这篇博文的原因是,当用户尝试请求较旧或较新的帖子时,该表可能会被更新,因为它被更新得相当频繁。
举个简单的例子:如果我有一个日期列表,[1-01-2021, 1-05-2021, 1-06-2021]和我已经向用户发送了1-01-2021,而用户发送给我这个日期和X=1,那么它期望返回的下一个日期应该是1-05-2021,而不是它已经有的日期。
我怎样才能快速有效地做到这一点?我想这可能有点棘手,因为我得先点我的桌子。我希望在两个方向上做到这一点,比如在时间上向前和向后。因此,如果有人给我一个日期,一个端点将返回该日期之后的10个帖子,而另一个端点,如果给定一个日期,它将返回该日期之前的X个帖子。我如何才能高效、快速地完成这项工作?
到目前为止,我有的最好的解决方案是为created设置db_index=True,然后按created排序,然后由用户指定一个日期,如下所示
results = Post.objects.filter(created__lt=some_date)不过,这似乎并不理想。如果有人能提出一个更快的方法,那将不胜感激!
发布于 2021-10-26 06:56:16
要获得给定日期附近的下一个和上一个X实体,您需要确保该字段已被索引(就像您已经对db_index=True所做的那样),然后执行以下操作
n = 5
results_before = Post.objects.filter(created__lt=some_date).order_by("-created")[:n]
results_after = Post.objects.filter(created__gte=some_date).order_by("created")[:n]如果需要,可以将两个结果连接在一起(记住,results_before是按时间倒序排列的,因为它来自数据库),或者将它们作为两个列表向前传递,只要有意义。
https://stackoverflow.com/questions/69695120
复制相似问题