8

指定されたフィールドの値が一連のレコードで同じであるorder_by場合、Djangoがどのように機能するかを知りたいです。order_byDBにscoreフィールドがあり、を使用してクエリセットをフィルタリングしているとしorder_by('score')ます。スコアの値が同じレコードはどのように配置されますか?

毎回、スコアが等しいレコードのサブセット内でランダムに順序付けられ、これによりクライアント側のページネーションが中断されます。これをオーバーライドして、一貫した順序でレコードを返す方法はありますか?

私はDjango1.4とPostgreSQLを使用しています。

4

3 に答える 3

16

他の答えが正しく説明しているように、order_by()複数の引数を受け入れます。次のようなものを使用することをお勧めします:

qs.order_by('score','pk') #where qs is your queryset

これらの場合、最後の引数として'pk'(または)を使用することをお勧めします。これは、すべてのモデルにフィールドがあり、その値が2つのレコードで同じになることはないためです。'-pk'pk

于 2012-10-08T07:17:28.413 に答える
14

order_byorder_by('score', '-create_time')複数のパラメーターを持つことができますが、常に同じクエリセットを返すと思います。

于 2012-10-08T05:45:54.653 に答える
2

私が正しく理解していれば、毎回一貫して順序付けられた結果セットが必要だと思います。order_by('score','id')最初にスコアで順序付けし、次に同じ値を持つ自動インクリメントidで順序付けするようなものを使用できるscoreため、出力は一貫しています。ドキュメントはこちらです。毎回正しい結果セットを取得する場合は、order_by で明示的に指定する必要があります。「id」を使用するのも 1 つの方法です。

于 2012-10-08T05:45:22.517 に答える