計算値に基づいて並べ替えたいレコードがいくつかあります。答えを得ました こちら ...のように:
sorted(Profile.objects.all(), key=lambda p: p.reputation)
次のようなProfileクラスで:
class Profile(models.Model):
...
@property
def reputation(self):
...
残念ながら、汎用ビューはquerysetオブジェクトを予期しており、リストを指定するとエラーがスローされます。
クエリセットを返すこれを行う方法はありますか
または...
何らかの方法でリストをクエリセットに変換できますか?Django docs。
データを非正規化しないことを望んでいますが、必要に応じてデータを非正規化します。
クエリセットを元に戻す唯一の方法は、すべてのロジックをSQLクエリに取り込むことができる場合のみです。
それが不可能なとき、(データを非正規化する必要があると思います)
データリストをクエリに戻すことは意味がありません。クエリオブジェクトがデータを保持することはありません。データベースへのクエリを表しているだけです。リストをクエリにした場合、すべてを再度フェッチする必要があり、それは冗長であり、パフォーマンス面では非常に悪いでしょう。
できること:
reputation
フィールドの計算方法を説明してください。データベース内のデータを何らかの方法で注文することはおそらく可能です。OK ...この投稿は古いですが、あなたができることは、リスト内のオブジェクトのすべてのids
を取得し、model.objects.filter(pk__in=list_of_ids)
を実行することです