我有点精神上陷入困境,乍一看似乎很简单。
我抓取要选择的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)
到目前为止一直很好 - 但我如何将分数实际添加为某种聚合并根据它们对查询集进行排序?
答案 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]