ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django模型1对多和多对多关系

2021-03-08 22:04:44  阅读:115  来源: 互联网

标签:关系 models 模型 实体 django Django 我们


django数据模型用python类的属性和方法方式对数据库表进行了映射,在操作数据库过程中,我们是对每个模型对象进行操作,而不是采用底层sql的方式,当然可能有的人喜欢用sql的方式直接操作数据库,我之前也是写sql对数据进行操作,但话说回来,既然我们选择用了用django框架开发,那我们就应该充分利用框架给我们提供好的方式去进行,这样既符合django的设计哲学,当然也给我们开发带来很多便利,那今天我们就从基本的说起,因为既然谈数据库,就不得不说实体,而实体之间就存在的各种关系,所以今天我们就说下django模型的1对多和多对多关系。

在开始我们django模型关系时,为方便我们更好的理解django模型,我们先从我们熟悉的基本关表讲起,我们先得了解一个基本问题,什么是1对多、多对多,为什么存在,我们该如何用关系型数据库表去描述,如何你对以上问题摸不着头脑,那么莫着急,我们一一说来,简单说我们刚才说的都是关系型数据库中数据描述实体之间的关系,什么是实体,书中讲的都很抽象,我们举几个例子很容易说明:比如一个学生就是一个实体,一个老师也是一个实体,一个球员也是一个实体,球队等这些都是所说的实体,每个实体都有自己的属性,比如学生就有姓名,性别,球员有编号,姓名,球队有队名等,通过这些实体的属性描述,在我们现实世界中会很容易发现他们其实是有关系的,比如球员和球队的关系,我们如何来分辨是到底是哪种关系呢?其实有一个很简单的办法(在这里我要感谢我大学老师,哈),找个纸,把多个实体画出来(比如用方框表示),然后用笔在其中一个实体上写上1,然后开始读1个xx对应xx实体,写完后然后反过来再来,表另一个实体写上1,再翻过来读一次,如何其中有发现某个实体是多的就写上m,如果两边读完都是多对多的就写上n:m,利用该方法,很容易实体出实体之前的关系,示意图如下:

图片

上面两个图分别表示了多对1和多对多关系,其实多对1也是反过来的1对多,没什么区别,那我们需要了解,在没有models模型前,我们是数据表中如何处理呢,比如我们就拿上面实体来举例说明:

学生(姓名,班号)和班级(班号),因为1个班级可以有多个学生,而一个学生只能属于1个班级,所以他们是1对多关系,用关系数据库描述需要在多的一方(学生)增加班号外键关联到班级中的班号,这样就可以查每个学生属于哪个班号了。

然后我们看多对多关系,学生(学号,姓名)和课程(课程号),因为一个学生可以选择多门课程,1门课程可以被多个学生选择,所以他们是多对多的关系,我们该如何建立他们之间关系呢,如何找出某个学生学习的课程呢,用我们上面的方法是不行了,因为这两个实体都是多的一方,所以呢,要建立他们之间的关系,我们需要多建立一个关系表,这个关系表中存储学号和课程号,并设置外键分别关联到学生和课程表中,这样就变成了两个1对多,1个学生可以选择多门课程,1门课程可以被多名学生选择,这样就可以根据他们的关系查找每个学生所学的课程了,基本的理论我们就说到这,我们接下来讲django模型。

我们之所以上面讲那么多,主要是为我们理解django模型做铺垫,因为理解了上面,再理解我们的模型就比较容易了,再加上django框架有一部分都帮我们做了,我们只管使用就好了,也很方便,但原理我们还是要懂一些的,避免出现问题,开始抓瞎呀,我们建立模型:

class Classes(models.Model):

   cls_num = models.CharField(max_length=30)


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会自动为你建立一个关系表来描述两个实体的关系,所以这就是用框架的好处,可以让你少些很多代码,而且从另一方面讲,你的代码野会变得比较强壮,今天我们就讲到这里了,下一篇我们讲如何通过数据模型对数据库表进行操作。


标签:关系,models,模型,实体,django,Django,我们
来源: https://blog.51cto.com/15060540/2651706

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有