Django ORM查询问题

如下截图,存在这样一张表 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 如何去查询?
Django ORM查询问题


回答:

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

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)]

以上是 Django ORM查询问题 的全部内容, 来源链接: utcz.com/a/160227.html

回到顶部