美文网首页
Django下模型的关联

Django下模型的关联

作者: 有趣的恶魔QAQ | 来源:发表于2019-03-20 19:11 被阅读0次

    一、一对一模型

    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 # studentStudent模型的名字
     ③通过 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 的对象 bbrelated_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 的对象 bbrelated_name=stu

     ①通过 aa 查找 Course 的数据 —— aa.course

     ②通过 bb 查找 Student 的数据 —— bb.student_set.all()
     ③通过 bb 查找 Student 的数据 —— bb.stu.all()

    注意:关联模型中的id字段不用创建,关联模型的时候会自动创建

    相关文章

      网友评论

          本文标题:Django下模型的关联

          本文链接:https://www.haomeiwen.com/subject/ncdzmqtx.html