一、一对一数据操作
在第三节中,我们已经在数据库中创建好了五张表,下面我们来开始操作吧!!!进入项目目录中的IDLE并导入五个模型类
① 从学生详情访问学生
② 从学生访问学生详情,通过studentdetail访问
二、一对多数据操作
学院信息表与学生信息表为一对多的关系
① 一对多表关系数据的添加
② 通过创建grade_id构成一对多关系,下图为通过学生来访问学院信息
方法二:
g1 = Grade.objects.first()
s1 = Student.objets.first()
s1.grade = g1
s1.save()
③ 通过学院来访问学生信息
student_set:管理器,格式为“源模型小写_set”
这个管理器可在定义时设置related_name参数来命名
grade = models.ForeignKey(related_name='student')
三、多对多数据操作
① 创建三门课程
② 学生表中有三人
③ 通过中间表创建关联
方法一:
方法二:
③ 查询报了课程为English的学生
④ 查询学生名为lucy的学生所报的课程
四、处理关联对象的一些方法
① create(**kwargs):添加不存在的数据 ,将数据直接存入数据库
意义:创建一个新的对象,将它保存并放在关联的对象集返回新创建的对象
② add(obj1, obj2, …):添加已经存在数据库的数据
例:向刚创建好的g1学院中添加s1这个学生
③ remove(obj1, obj2, …): 从关联的对象集中删除指定的模型对象,删除的是关系表中的数据
例:从g1学院中移除s1这个学生
如上图所示,从g1学院中移除s1这个学生后,s1仍然是存在,也就是说它不会删除学生表中的数据,但学生表中的grade_id字段允许为空才可删除,删除后这个字段的值为null
④ clear():从关联的对象集中删除所有对象
例:将学生s1所报的课程全部移除
五、多表查询-----跨关联关系的查询
① 查询学院名字为’python学院‘的学生信息
② 也可反向工作,若要引用,只需使用该模型的小写名称
例:查询学生名字中包含’lu‘的学生的学员信息
③ 查询学号为’160102010101‘的学生所报的课程
④ 查询报名了课程1的所有学生
⑤ 查询报名了’English‘课程的学生所属学院的信息