通过另一个字典订购 Django 查询集
Order a Django queryset by another dict
所以,现在我有了这个模型和一个计算字典
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')
你可以做到这一点,但这是相当 "strange":
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
所指的模型)。
所以,现在我有了这个模型和一个计算字典
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')
你可以做到这一点,但这是相当 "strange":
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
所指的模型)。