質問

(これは完全に不合理である場合は私に知らせてください、それはおそらく私がこれで何かを発見していない理由である。)

この話は二つのモデルRankingArtistを持ち、RankingArtist(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を使用しています。

役に立ちましたか?

解決

このジャンゴによって引き起こされていません。何の順序が指定されていないため、データベースがこの順序でそれらを返してます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top