django数据模型用python类的属性和方法方式对数据库表进行了映射,在操做数据库过程当中,咱们是对每一个模型对象进行操做,而不是采用底层sql的方式,固然可能有的人喜欢用sql的方式直接操做数据库,我以前也是写sql对数据进行操做,但话说回来,既然咱们选择用了用django框架开发,那咱们就应该充分利用框架给咱们提供好的方式去进行,这样既符合django的设计哲学,固然也给咱们开发带来不少便利,那今天咱们就从基本的提及,由于既然谈数据库,就不得不说实体,而实体之间就存在的各类关系,因此今天咱们就说下django模型的1对多和多对多关系。python
在开始咱们django模型关系时,为方便咱们更好的理解django模型,咱们先从咱们熟悉的基本关表讲起,咱们先得了解一个基本问题,什么是1对多、多对多,为何存在,咱们该如何用关系型数据库表去描述,如何你对以上问题摸不着头脑,那么莫着急,咱们一一说来,简单说咱们刚才说的都是关系型数据库中数据描述实体之间的关系,什么是实体,书中讲的都很抽象,咱们举几个例子很容易说明:好比一个学生就是一个实体,一个老师也是一个实体,一个球员也是一个实体,球队等这些都是所说的实体,每一个实体都有本身的属性,好比学生就有姓名,性别,球员有编号,姓名,球队有队名等,经过这些实体的属性描述,在咱们现实世界中会很容易发现他们实际上是有关系的,好比球员和球队的关系,咱们如何来分辨是究竟是哪一种关系呢?其实有一个很简单的办法(在这里我要感谢我大学老师,哈),找个纸,把多个实体画出来(好比用方框表示),而后用笔在其中一个实体上写上1,而后开始读1个xx对应xx实体,写完后而后反过来再来,表另外一个实体写上1,再翻过来读一次,如何其中有发现某个实体是多的就写上m,若是两边读完都是多对多的就写上n:m,利用该方法,很容易实体出实体以前的关系,示意图以下:sql
上面两个图分别表示了多对1和多对多关系,其实多对1也是反过来的1对多,没什么区别,那咱们须要了解,在没有models模型前,咱们是数据表中如何处理呢,好比咱们就拿上面实体来举例说明:
数据库
学生(姓名,班号)和班级(班号),由于1个班级能够有多个学生,而一个学生只能属于1个班级,因此他们是1对多关系,用关系数据库描述须要在多的一方(学生)增长班号外键关联到班级中的班号,这样就能够查每一个学生属于哪一个班号了。django
而后咱们看多对多关系,学生(学号,姓名)和课程(课程号),由于一个学生能够选择多门课程,1门课程能够被多个学生选择,因此他们是多对多的关系,咱们该如何创建他们之间关系呢,如何找出某个学生学习的课程呢,用咱们上面的方法是不行了,由于这两个实体都是多的一方,因此呢,要创建他们之间的关系,咱们须要多创建一个关系表,这个关系表中存储学号和课程号,并设置外键分别关联到学生和课程表中,这样就变成了两个1对多,1个学生能够选择多门课程,1门课程能够被多名学生选择,这样就能够根据他们的关系查找每一个学生所学的课程了,基本的理论咱们就说到这,咱们接下来说django模型。框架
咱们之因此上面讲那么多,主要是为咱们理解django模型作铺垫,由于理解了上面,再理解咱们的模型就比较容易了,再加上django框架有一部分都帮咱们作了,咱们只管使用就行了,也很方便,但原理咱们仍是要懂一些的,避免出现问题,开始抓瞎呀,咱们创建模型:ide
class Classes(models.Model):学习
cls_num = models.CharField(max_length=30)spa
class Student(models.Model):设计
name = models.CharField(max_length=30)对象
cls_num = models.ForeignKey(Classes)
class Course(models.Model):
c_num = models.ManyToManyField(Student)
以上就是基本的模型,为方便说明,我只列了须要的字段,实际工做中会比这个复杂些,但万变不离其宗,理解了这个简单的,看其它的也会容易,须要说明的用django模型,不要特别指定id,由于djang在创建数据表的时候会默认创建一个自增加的id, 对于多对多方面,你也不须要创建多余模型,django会自动为你创建一个关系表来描述两个实体的关系,因此这就是用框架的好处,可让你少些不少代码,并且从另外一方面讲,你的代码野会变得比较强壮,今天咱们就讲到这里了,下一篇咱们讲如何经过数据模型对数据库表进行操做。