どのように並べ替えによる計算値django
-
06-09-2019 - |
質問
こんにちはいうオブジェに基づく計算値にdjango...どのような
ここでは一例ですユーザープロファイルのモデルに基づくスタックオーバーフローを説明した苦境:
class Profile(models.Model):
user = models.ForeignKey(User)
def get_reputation():
...
return reputation
reputation = property(get_reputation)
いったいソートユーザーによる評判です。そうい?私だけではできないこと:
Profile.objects.order_by("-reputation")
でも少しでも皆さんの力になれ:)
解決
あなたは(あなたがたくさんのレコードを持っており、それらをページ付けなどする必要があるため)、データベースにソートを行う必要がある場合、唯一の現実的な選択肢は、非正規化フィールドに評判を有効にすることです(例えば上のオーバーライドされたsave()
方法で更新モデル)。
他のヒント
あなたの計算コードのみのPythonの中に存在しているので、あなたにもPythonでソートを実行する必要があります:
sorted (Profile.objects.all (), key = lambda p: p.reputation)
としてのDjango-1.8で並べ替えQuerySet用 クエリを表現 として計算値で描画されるSQL.も利用できます annotations
のモデルとしての order_by
ます。
from django.db.models import F
Profile.objects.annotate(reputation=(F('<field>') + ...)).order_by("-reputation")
基本的な操作のように +
, -
, *
, /
や **
使用可能 F()
.また他にもいくつかの機能など Count
, Avg
, Max
, ...
リンク:
またこのQ&A 注QuerySetによる集合フィールド値
所属していません StackOverflow