【问题标题】:How to mix queryset results?如何混合查询集结果?
【发布时间】:2012-08-22 12:43:09
【问题描述】:

我有疑问:

items = MyModel.objects.all().order_by('nr')[:10]

我得到了 10 件数量更大的物品。现在我必须混合这些结果。怎么做?

【问题讨论】:

  • 你所说的“混合”是什么意思?你想随机洗牌吗?
  • 是的,我想随机播放这个结果

标签: django


【解决方案1】:

奇怪的是,这个没有很好记录的功能有效:

Country.objects.order_by('?')

来源:http://www.jpstacey.info/blog/2008/09/03/random-ordering-of-query-results-in-django

令人惊讶的是,the existing documentation 几乎没有 Google 果汁,除非您搜索“随机”而不是“随机”。

【讨论】:

【解决方案2】:

您无法在获取切片后重新排序查询,因此请使用不同的方法

import random
items = sorted(MyModel.objects.all().order_by('nr')[:10], key=lambda x: random.random())

【讨论】:

    【解决方案3】:

    好的,您不能在拉入查询集后对其重新排序,但您可以这样做

    import random
    items = list(MyModel.objects.all().order_by('nr')[:10])
    random.shuffle(items)
    

    【讨论】:

    • 投反对票的人愿意评论为什么这不是一个合适的答案,我会更新它吗?
    • 这是一个非常合适的答案。这是我的赞成票。
    猜你喜欢
    • 2018-08-28
    • 2019-02-05
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多