django表与表之间的关系

django表与表之间的关系

  • 一对多:models.ForeignKey(其他表)
  • 多对多:models.ManyToManyField(其他表)
  • 一对一:models.OneToOneField(其他表)

django表与表之间的关系
django表与表之间的关系

  • 一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)

一个学院信息表有多个学生的信息表

再比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写多篇文章。文章和作者之间的关系就是典型的多对一的关系。作者和文章的关系就是一对多。

  • 多对多:在某表中创建一行数据是,有一个可以多选的下拉框

不同的学生有不同课程表

再比如文章和标签的关系。一篇文章可以有多个标签,一个标签可以被多个文章所引用。因此标签和文章的关系是典型的多对多的关系。

  • 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了)

一个学生信息表就只用一个对应的详细信息表

再比如一个用户表和一个用户信息表。在实际网站中,可能需要保存用户的许多信息,但是有些信息是不经常用的。如果把所有信息都存放到一张表中可能会影响查询效率,因此可以把用户的一些不常用的信息存放到另外一张表中我们叫做UserExtension。但是用户表User和用户信息表UserExtension就是典型的一对一了。

django表与表之间的关系

django表与表之间的关系
through=‘Enroll’ 就是有Enroll表才能有课程表,想下没有学生报名还上什么课
django表与表之间的关系

外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错!

一般使用CASCADE 表示级联删除

也就是有一个数据其中一个表删了,管聊的表就会上,想下如果有个学生不读了,删掉了student中的数据,那是不是也要删除在学院的报名表