だから、今私はこのモデルと計算された辞書を持っています
class User(models.Model):
user_id = models.AutoField(primary_key=True)
#scores dict {user_id: score}
scores = {1: 9, 2: 2, 3: 1, 4: 5}
スコア辞書の各ユーザースコアに基づいてクエリセットを並べ替える必要があります。このようなもの
Views.py
queryset.annotate(score=scores['user_id']).order_by('score')
あなたはこれを行うことができますが、これはかなり「奇妙」です:
from django.db.models import Case, IntegerField, Value, When
queryset.annotate(
score=Case(
*[When(user_id=k, then=Value(v)) for k,v in scores.items()]
default=None,
output_field=IntegerField(null=True)
)
).order_by('score')
スコアを関連するUser
モデル(user_id
が参照している)に保存する方がおそらく良いでしょう。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加