(如果这完全荒谬,请告诉我,这可能是我没有找到任何东西的原因。)
这个故事有两个模型Ranking
,通常与(object_id Artist
,content_type...整个shebang)相关。Ranking
Artist
Ranking.objects.values_list()
我有一个按某个字段排序的对象列表(在我的情况下score
)。所以很明显,如果我想显示排名的艺术家列表,我希望它们以相同的顺序排列。我尝试了不同的方法,例如.filter(pk__in=list)
,.in_bulk(list)
等。也尝试将结果强制.values_list()
转换为元组。
他们都拿了我的清单:
>>> objects = Ranking.objects.filter(<stuff>).order_by('score')
>>> objects_list = objects.values_list('object_id', flat=True)
>>> objects_list
[8, 1, 2, 15, 14, 3, 13, 31, 16, 5, 4, 7, 32, 9, 37]
并像这样返回它:
>>> Artist.objects.filter(id__in=objects_list).values_list('id', flat=True)
[7, 32, 3, 8, 4, 2, 31, 9, 37, 13, 16, 1, 5, 15, 14]
(为了理智,我只是在第二种情况下提供 ID。)
现在我可以让它工作的唯一方法是创建一个空列表并循环遍历非values_list()
查询。
for item in objects:
ranked_items.append(item.content_object)
这只会产生n
查询,所以我想知道是否有更好的方法。如标签所示,我使用的是 PostgreSQL。