根据带有ID和分数的其他列表排序Django查询集

时间:2017-08-15 13:04:12

标签: python django list sorting django-queryset

我有点精神上陷入困境,乍一看似乎很简单。

我抓取要选择的ids列表,然后scores根据这些列表对其进行排序。

我目前的解决方案如下:

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)

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

1 个答案:

答案 0 :(得分:2)

对分数列表进行排序,并使用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]