3

(これが完全にばかげている場合はお知らせください。おそらくそれが、私がこれについて何も見つけられなかった理由です。)

このストーリーには 2 つのモデルがRankingありArtistRanking一般的に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 を使用しています。

4

1 に答える 1

2

これは Django が原因ではありません。順序が指定されていないため、データベースはこの順序でそれらを返します。

于 2010-02-11T21:39:32.473 に答える