Django ORM查询问题

TTTTTTzx
  • 3
新手上路,请多包涵

如下截图,存在这样一张表 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

回复
阅读 1k
2 个回答

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

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的重命名,可以自己定义,望采纳。

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

山笑i
  • 0
新手上路,请多包涵
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)]
宣传栏