有没有办法让查询尊重输入参数的顺序?

时间:2010-02-11 21:35:47

标签: django postgresql django-queryset django-orm

(如果这完全荒谬,请告诉我,这可能是我没有找到任何内容的原因。)

此故事有两个模型RankingArtistRanking通常与Artist(object_id,content_type ......整个shebang)相关。

我有一个由某个字段排序的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。

1 个答案:

答案 0 :(得分:2)

这不是由Django引起的;您的数据库按此顺序返回它们,因为没有指定排序。