我正在阅读这篇关于分页的博客,但我试图通过创建日期时间来快速查询。例如,如果我得到一个请求,其中一个参数是日期时间,我想要一个快速的方法来获得按顺序创建的下X个帖子。我不能使用这篇博文的原因是,当用户试图请求旧的或新的帖子时,表可能会更新,因为它更新得非常频繁。
所以在一个简单的玩具示例中:如果我有一个日期列表[1-01-2021, 1-05-2021, 1-06-2021]
,并且我已经将1-01-2021
发送给用户,并且用户将该日期发送给我并且X=1,那么它期望下一个日期它应该返回1-05-2021
而不是返回它已经拥有的日期。
我怎样才能快速有效地做到这一点?我想这可能有点棘手,因为我得先订桌子。我想从两个方向来做,向前和向后的时间。因此,如果有人给我一个日期,一个端点将返回在那之后的10篇文章,如果给另一个端点一个日期,它将返回在那之前的X篇文章。我怎样才能高效、快速地做到这一点?
到目前为止,我所拥有的最佳解决方案是将db_index=True
设置为created
,然后按created
排序,然后由用户给出日期,执行类似
results = Post.objects.filter(created__lt=some_date)
这似乎不太理想。如果有人能建议一个更快的方法,我将不胜感激!
要获得给定日期前后的下一个和上一个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
是按时间顺序倒序的,因为它来自数据库),或者将它们作为两个列表向前传递,只要有意义。