【问题标题】:Ordering a Django queryset based on other list with ids and scores根据带有 id 和分数的其他列表对 Django 查询集进行排序
【发布时间】:2018-01-23 09:48:57
【问题描述】:

我对某件事有点心烦意乱,乍一看似乎很简单。

我正在获取要选择的 idsscores 的列表,以根据它们对它们进行排序。

我目前的解决方案如下:

ids = [1, 2, 3, 4, 5]

items = Item.objects.filter(pk__in=ids)

现在我需要以某种方式添加基于分数的排序,因此我将构建以下列表:

scores = [
        {'id': 1, 'score': 15},
        {'id': 2, 'score': 7},
        {'id': 3, 'score': 17},
        {'id': 4, 'score': 11},
        {'id': 5, 'score': 9},
    ]

ids = [score['id'] for score in scores]

items = Item.objects.filter(pk__in=ids)

到目前为止一切都很好 - 但我实际上如何将分数添加为某种聚合并根据它们对查询集进行排序?

【问题讨论】:

    标签: python django list sorting django-queryset


    【解决方案1】:

    对分数列表进行排序,并使用in_bulk() 获取查询集。

    scores = [
        {'id': 1, 'score': 15},
        {'id': 2, 'score': 7},
        {'id': 3, 'score': 17},
        {'id': 4, 'score': 11},
        {'id': 5, 'score': 9},
    ]
    sorted_scores = sorted(scores)  # use reverse=True for descending order
    ids = [score['id'] for score in scores]
    items = Item.objects.in_bulk(ids)
    

    然后按您想要的顺序生成项目列表:

    items_in_order = [items[x] for x in ids]
    

    【讨论】:

    • 谢谢!非常感激!我放弃使用in_bulk,因为我有一个我没有提到的 select_related
    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2017-09-08
    • 1970-01-01
    • 2012-12-20
    • 2018-02-09
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    相关资源
    最近更新 更多