导读:今天首席CTO笔记来给各位分享关于django一对多怎么写的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
Django模型(三)
知识要点:
表关系的实现
一对多表关系
在Mysql中一对多是通过外键实现的,在django模型中通过ForeignKeyfield类型实现。
一对一表关系
在Mysql中一对一是通过外键加唯一键实现的,在django模型中通过OneToOneField类型实现。
多对多表关系
在Mysql中多对多是通过中间表外键加联合唯一键实现的,在django模型中通过ManyToManyField类型实现。中间表模型会自动帮我们创建好。
例子:
关系表中数据的操作
django 怎么理解一对多 多对多
这其实是传统关系数据的实体关系建模的内容,实体和实体之间的连接关系。
比如说一个人只能有一个父亲,一个父亲可以有多个孩子这就是,父亲和孩子之间就是1对多。
如果父亲有两个弟弟,2个儿子,那父亲的孩子就有2个叔叔,每个叔叔都有个2个侄子,这就叫做多对多。
Django model 遇到查询条件组合比较多的情况下怎么写
没有用过djongo,但是我想应该都是差不多的,这类orm的filter或者where方法返回的都是一个query对象,所以应该是可以连续使用filter的。
比如你前面写了a = search.objects.filter( xxx ), 然后你想再加一个条件,就继续a.filter( yy )就好。
Django表关联对象及多表查询
首先建立Student,Dpartment,Course,Stu_info表
一对多表关系数据的添加:
1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问:
Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
那么如果我们也希望在在访问某个学院的实现对象的学生的时候改怎么访问呢???
表关联对象的访问:
可以在定义时设置related_name 参数来覆盖foo_set 的名称.
clear() 从关联的对象集中删除所有的对象
多表查询----跨关联关系的查询:
Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。 若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。
模型关联关系
模型的对应关系主要分为:一对一,一对多,以及多对多。
常见的几种数据关系,django都提供了很好的支持
注意:通过拓展表去获取学生的信息的话,语法如下;
学生拓展表的单条对象.关联字段,即可获取到学生表的数据
注意:通过学生获取关联表的数据的话,语法如下:
学生对象.关联的表名,即可获取到关联表的数据
在关联字段OneToOneField中加入参数related_name='xxx'
注意:通过学生获取关联表的数据的话,语法如下:
学生对象.关联的字段中定义的related_name参数,即可获取到关联表的数据
修改on_delete参数
models.OneToOneField('Student', on_delete=models.SET_NULL, null=True)
在删除student对象的时候,stuinfo的关联字段会设置为空null=True,如下命令去删除student的数据:
定义一个班级类还有学生类,实现一对多的关系:
注意:使用models.ForeignKey关联 获取对象元素 grade.student_set
语法:通过一获取多的数据
公式: 一的对象.多的模型名小写_set
然后在获取数据all(), get(), filter() 等等
如下先通过学生去获取班级信息:
如下是通过班级获取学生信息:
重点:
定义了related_name字段以后,只能通过related_name去反向获取数据,再也不能通过_set方法去获取数据了
获取python班下的所有学生的信息
获取python班下语文成绩大于80分的女学生
-获取python班下语文成绩超过数学成绩10分的男学生)2.8 获取python班下语文成绩超过数学成绩10分的男学生
获取出生在80后的男学生,查看他们的班级
定义购物车,用户的例子实现多对多:
1. 创建用户模型:
2. 创建商品模型:
获取第一个用户购买了那些商品
获取指定商品的购买用户信息
结语:以上就是首席CTO笔记为大家介绍的关于django一对多怎么写的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。