首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django分页随机: order_by('?')

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

Stack Overflow用户
提问于 2014-01-30 23:38:39
回答 3查看 4.2K关注 0票数 2

我喜欢Django,并且喜欢它实现的分页功能。但是,当试图将随机排序的查询集拆分到多个页面时,我会遇到一些问题。

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-30 23:53:34

我认为这个非常好的答案对你是有用的:如何在Django中对一组具有分页功能的对象进行“随机”排序?

基本上,他建议缓存对象列表并使用会话变量引用它,这样就可以在页面之间维护它(使用django分页)。

或者您可以手动将列表随机化,并传递一个种子来维护同一用户的随机化!

票数 2
EN

Stack Overflow用户

发布于 2014-02-21 17:16:11

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

代码语言:javascript
复制
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调用的情况下,种子可以存储在会话/cookie/您的前端。

警告-有一个更好的方法,,这实际上是一个非常缓慢的操作。我发现这篇博客文章描述了一种非常好的方法,既可以检索单个结果,也可以检索结果集。在这种情况下,种子将在本地随机数生成器中使用。

票数 4
EN

Stack Overflow用户

发布于 2014-01-31 00:17:09

实现这一目标的最佳方法是使用一些分页应用程序,如:

就我个人而言,我使用的第一个,它与海堆栈很好地集成。

代码语言:javascript
复制
 """ EXAMPLE: (django-pagination) """
     #paginate 10 results.

    {% autopaginate my_query 10 %}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21469800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档