gpt4 book ai didi

Django分页随机: order_by ('?' )

转载 作者:行者123 更新时间:2023-12-02 15:33:49 24 4
gpt4 key购买 nike

我喜欢 Django,喜欢它实现的分页功能。但是,我在尝试跨多个页面拆分随机排序的查询集时遇到了问题。

例如,我在查询集中有 100 个元素,并希望一次显示 25 个。将上下文对象作为随机排序的查询集提供(使用 .order_by('?') 规范),每次请求新页面时都会将全新的查询集加载到上下文中(第 2、3、4 页)。

明确说明:我如何(或我可以)请求一个随机排序的查询集,并在可消化的页面上显示它?

最佳答案

我最近遇到了同样的问题,我不想缓存所有结果。我为解决这个问题所做的是结合使用 .extra() 和 raw()。这是它的样子:

raw_sql = str(queryset.extra(select={'sort_key': 'random()'})
.order_by('sort_key').query)
set_seed = "SELECT setseed(%s);" % float(random_seed)
queryset = self.model.objects.raw(set_seed + raw_sql)

我相信这只适用于 postgres。在 MySQL 中做类似的事情可能更简单,因为您可以将种子直接传递给 RAND(123)。在 ajax 调用的情况下,种子可以存储在 session /cookie/您的前端中。

警告 - 有更好的方法这实际上是一个非常缓慢的操作。我找到了 this blog post描述了一种非常好的方法,既可以检索单个结果,也可以检索结果集。在这种情况下,种子将用于您的本地随机数生成器。

关于Django分页随机: order_by ('?' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com