クエリは、入力されたパラメータの順序を尊重する方法はありますか?
-
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を使用しています。
解決
このジャンゴによって引き起こされていません。何の順序が指定されていないため、データベースがこの順序でそれらを返してます。
所属していません StackOverflow