一、一对一模型
1.定义关联字段(定义在任何一方都可以)
例如学生(模型Student)和学生信息(模型StudentInfo)的关联
语法:
stuinfo = models.OneToOneField(Student, on_delete=models.CASCADE, 约束条件null=True)
on_delete取值及说明:
①models.CASCADE —— 表示主键所在行数据被删,外键所在行的数据也会被删
②models.PROTECT —— 表示主键有对应的外键数据时,不允许删除主键的数据
③models.SET_NULL —— 表示主键删除,外键置空
2.使用
已知学生模型 Student 的对象 aa ,学生信息模型 StudentInfo 的对象 bb。
①通过 aa 查找 StudentInfo 的数据 —— aa.stuinfo
②通过 bb 查找 Student 的数据方法1 —— bb.student
# student为Student模型的名字
③通过 bb 查找Student的数据方法2 —— bb.stu
# 此处应用看下面补充
补充:若在关联字段中设置了 related_name 参数,例如 related_name='stu',则通过 bb.stu查找学生的数据
二、一对多模型
1.定义关联字段(定义在多的一方)
例如学生模型 Student 和班级模型 Grade
语法:
grade = models.ForeignKey(Grade, on_delete=CASCADE, null=True)
2.使用
已知模型 Student 的对象 aa ,模型 Grade 的对象 bb , related_name=stu。
①通过 aa 查找 Grade 的数据 —— aa.grade
②通过 bb 查找 Student 的数据 —— bb.student_set.all()
# student 为模型 Student 的模型名,因为查询结果不只一条,所以要添加 all()
③通过 bb 查找 Student 的数据 —— bb.stu.all()
# all()的解释同上
三、多对多模型
1.定义关联字段(定义在任何一方)
例如学生模型 Student和课程模型 Course,此处定义在学生模型中
语法:
course = models.ManyToManyField(Course, related_name='stu')
2.使用
已知学生模型 Student 的对象 aa ,课程模型 Course 的对象 bb,related_name=stu。
①通过 aa 查找 Course 的数据 —— aa.course
②通过 bb 查找 Student 的数据 —— bb.student_set.all()
③通过 bb 查找 Student 的数据 —— bb.stu.all()
注意:关联模型中的id字段不用创建,关联模型的时候会自动创建
网友评论