有没有一种方法,使查询尊重输入参数的顺序?
-
20-09-2019 - |
题
(请让我知道这是完全荒谬的,这也许就是为什么我还没有发现这样的东西的一个原因。)的
这故事有两种型号Ranking
和Artist
,Ranking
是一般相关Artist
(OBJECT_ID,CONTENT_TYPE ......整个事情)。
我具有由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。
解决方案
这也不会引起由Django的;因为没有指定排序数据库正在返回他们在这个顺序。
不隶属于 StackOverflow