为了账号安全,请及时绑定邮箱和手机立即绑定

通过另一个字典订购 Django 查询集

通过另一个字典订购 Django 查询集

陪伴而非守候 2022-09-13 19:44:37
所以,现在我有这个模型和一个计算字典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


查看完整回答
反对 回复 2022-09-13
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号