问答

Django ORM查询问题

作者:admin 2021-09-08 我要评论

如下截图,存在这样一张表 student model 有三个字段 name 学生姓名 score 分数 created_time 记录创建时间 class StudentScore(models.Model): name = models.C...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

如下截图,存在这样一张表 student model 有三个字段 name 学生姓名 score 分数 created_time 记录创建时间

class StudentScore(models.Model):
    name = models.CharField('姓名', max_length=128)
    score = models.IntegerField(verbose_name='分数')
    created_time = models.DateTimeField(auto_now_add=True)

每位学生可能有多条记录, 我需要用每位学生最新的一条记录,做一个排行榜, 用 django 的 orm 如何去查询?
image.png

###

这个也就是聚合查询,可以这样写

from django.db.models import Max   # 倒入Max函数查询最大时间,也就是最新时间
from .models import StudentScore   # 倒入你的StudentScore model类

student_info = StudentScore.objects.values("name").annotate(latest_date=Max('create_time'))

其中 latest_date 是create_time的重命名,可以自己定义,望采纳。

要查询其他数据, 后面加上条件

###
import operator


def select(request):
    data = User.objects.values('name').distinct()
    Rank = {}
    for i in data:
        m = User.objects.filter(name__exact=i['name']).order_by('created_time').reverse().first()
        Rank[m.name] = m.score
    score_rank = sorted(Rank.items(), key=operator.itemgetter(1), reverse=True)
    print(score_rank)
    return HttpResponse("OK")

输出

[('王凡', 100), ('张三', 99), ('李四', 87), ('柳儿嘛', 85)]

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Django ORM查询问题

    Django ORM查询问题

  • as intel汇编如何引用.bss的变量

    as intel汇编如何引用.bss的变量

  • IOS,从UIRectEdgeNone布局方式的页面A

    IOS,从UIRectEdgeNone布局方式的页面A

  • electron-vue项目新建窗口如何弹出指定

    electron-vue项目新建窗口如何弹出指定

腾讯云代理商
海外云服务器