所以,现在我有这个模型和一个计算字典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.pyqueryset.annotate(score=scores['user_id']).order_by('score')
1 回答

青春有我
TA贡献1784条经验 获得超8个赞
你可以这样做,但这很“奇怪”:
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')
最好只将分数存储在相关模型(所指的)中。Useruser_id
添加回答
举报
0/150
提交
取消