Django:模型_QuerySet对象实例

本文通过一系列实例介绍了如何在Django中使用QuerySet对象进行复杂查询,包括查询平均成绩大于60分的学生及其平均成绩,查找特定学生选修的课程,获取所有学生的信息以及选课数量和总成绩,统计姓'李'的老师数量,以及找出未学过'李'老师课程的学生。文章详细解析了查询语句的构建逻辑,强调了灵活运用表关系和QuerySet方法的重要性。
摘要由CSDN通过智能技术生成

QuerySet对象实例

前面几章学习了QuerySet对象的很多方法,在实际场景中可能需要几个不同的方法相互调用,才能实现最终的需求,特别是在根据多个表关系来查询数据时。所以要做到灵活的使用的话,还是需要多练习

 

模型类

后面会介绍几个实际例子,所有例子都是基于下面几个模型类来实现的

例1:
⑴模型类

⑵查看数据:学生表

⑶查看数据:老师表

⑷查看数据:课程表

⑸查看数据:成绩表

 

 

查询每科平均成绩大于60分的同学和其平均成绩

例2:使用自己的方法

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from polls.models import Student,Score,Course,Teacher
from django.db import models
from django.db import connection


def index(request):
    #查询每科平均成绩大于60分的同学和其平均成绩
    score_avgs = Student.objects.annotate(score_avg=(models.Avg("score__score")))#查询每个学生的平均成绩
    print(score_avgs)
    students_list = []
    scores_avg_list = []
    for students_avg in score_avgs:#对返回的QuerySet进行遍历:返回模型类
        print(students_avg)
        print(students_avg.score_avg)
        if students_avg.score_avg >= 60:#依次判断每个模型类下面的score_avg属性值是否>=60
            students_list.append(students_avg.name)#获取score_avg属性值是否>=60数据中的name属性值(因为是从Student模型类开始查询的,因此会返回Student表中的数据)
            scores_avg_list.append(students_avg.score_avg)
        else:
            pass
    student_score_dicts = dict(zip(students_list,scores_avg_lis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值