(これが完全にばかげている場合はお知らせください。おそらくそれが、私がこれについて何も見つけられなかった理由です。)
このストーリーには 2 つのモデルが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]
(正気を保つために、2 番目のケースで ID を指定しているだけです。)
現在、これを機能させる唯一の方法は、空のリストを作成し、非values_list()
クエリをループすることです。
for item in objects:
ranked_items.append(item.content_object)
これはn
クエリを生成するだけなので、より良い方法があるかどうか疑問に思っています。タグで示されているように、PostgreSQL を使用しています。