九.django模型基础(三)之关联对象操作及多表查询
Ⅰ.关系表的数据操作
1.正向
正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向。
1)更新(增)
a.通过属性复制
b.通过主键的方式
总结: ForeignKey 字段的更新,跟普通字段没什么区别
a.实例(增加班级)
b.二次实例(与上同)
c.将某学生的数据转到另外的班级
2)删
只有外键设置了 null=True ,就可以通过赋值None来删除关系。
a.删的实例
3)查
2.反向
反向:一个模型如果被另外一个模型外键关联,通过这个模型对关联它的模型进行操作交错反向
1)查
通过管理器 ,默认管理器是有外键的模型名称的小写加上 set (形如: foo__set , 其中 foo 是模型名称小写 ),通过这个管理器可以查询模型的实例,在定义外键的时候,通过related_name 可以覆盖这个名称。
2)增
a. 通过add方法 (可以添加多个) 直接操作
b. 通过create方法
3)删
此处的删只是删掉关系
a.通过 remove(obj1,obj2,obj3) 直接操作
b.通过 clear() 清空 (将所有的关系删除)
4)改
替换对象集
set([s1,s2])
5)实例
a.反向的一般情况
b.管理器的特殊修改(关于查)
c.管理器的特殊修改(关于增)
d.管理器的特殊修改(关于删)
e.管理器的特殊修改(关于改)
Ⅱ.关系表的数据操作之(多对多)
如果因为有额外字段,自定义了中间模型,我们需要通过中间模型的管理器,进行manytomany关系的创建和删除。一般地,默认情况,跟一对多中的,add,create,remove,clear用法一致。唯一的区别是,多对多正向的时候,多对多字段就是个管理器。反向的时候,跟一对多的方向一致,也是在模型小写后面加上 _set. 和一对多类似,一样可以通过定义 related_name可以覆盖这个名字。
1.实例
1)中间表的操作实例
2)多对多实例
Ⅲ.关系表的数据操作之(一对一)
非常类似于多对一字段,增删改查和普通字段没有什么区别。
反向的时候,使用模型的小写,也可以给related_name覆盖,这个就不是管理器,就是一个普通属性。
注意:一个被一对一管理的模型,它的实例,如果没有被分配关系、
例子:学生对象,没有分配一个学生详情对象。如果去取,会抛出异常(DoesNotExist)
1.实例
Ⅳ.多表查询(跨表查询)
要跨越关系,只需要使用跨越模型的相关字段的字段名,以下划线分隔,直到达到你想要的字段为止。
例如:查询男生都报名了什么课程
res = Course.objects.filter(student__sex=1).distinct()
这个关系要多深就有多深
例如:查询所有报名了python课程的学员
res = Student.objects.filter(course__name__contains='python')
例如:查询所有报名了python全栈课程,在django框架第七期的学员
res = Student.objects.filter(course__name='python全栈',grade__name='django框架',grade__num='')
例如:学员报名了python课程的班级有哪些?
res = Grade.objects.filter(students__course__name__contains='python').distinct()
九.django模型基础(三)之关联对象操作及多表查询的更多相关文章
- Django框架基础知识08-表关联对象及多表查询
1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...
- Django——8 关系表的数据操作 表关联对象的访问 多表查询
Django 关系表中的数据操作 表关联对象的访问 关联对象的add方法 create方法 remove方法 clear方法 多表查询 查询补充 聚合查询 分组查询 F查询 Q查询 关系表的数据操作 ...
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- Django模型基础(三)——关系表的数据操作
模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- Mysql基础(四):库、表、记录的详细操作、单表查询
目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...
- django模型基础(三)
本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...
- Django 学习第八天——Django模型基础第三节
一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...
随机推荐
- 微信小程序 选择微信自带的地址 用户授权选择了拒绝
// 选择微信自带地址 addAddr:function () { wx.chooseAddress({ success: function (res) { self.setData({ addrIn ...
- 魅族5.0以上设备(亲测有效)激活Xposed框架的流程
对于喜欢研究手机的哥们来说,大多时候会使用到Xposed框架及种种功能强大的模块,对于5.0以下的系统版本,只要手机能获得ROOT权限,安装和激活Xposed框架是比较简单的,但随着系统版本的持续更新 ...
- 搭建Linux虚拟服务器
1.搭建Linux虚拟机环境安装VMware Workstation 14下载地址:https://www.cr173.com/soft/68480.html密钥:FF31K-AHZD1-H8ETZ- ...
- 【已采纳】charles工具使用心得
1.下载charles 可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/ 根据自己的操作系统下载对应的版本,然后进行安装,然后打 ...
- Redis笔记-Sentinel哨兵模式
Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...
- firewalld简介及功能
1. firewalld简介 firewalld是CentOS7/Red Hat7的一大特性,最大的好处有两个: 第一个支持动态更新,不用重启服务: 第二个就是加入了防火墙的zone概念 firewa ...
- mysql中几个日期时间类型之间的区别和使用
MySQL中有如下几个时间类型:date.time.datetime.timestamp.year MySQL数据类型 含义 date 只存 ...
- springboot 应用中静态资源下载
一. 场景介绍 Excel模板静态资源在,应用中的static文件夹中,文件名称包含中文; 需求:页面直接访问下载Excel模板. 二.目录结构 三.后台代码 @GetMapping("/d ...
- node+mysql,实现基本的增删改查,附带跟踪记录和运行时间记录
Node + mysql 实现基础的增删改查,以及性能测试. 网上有很多这样的例子,我也是找来学习的. 感觉node对mysql的操作非常简单,也很实用,比如自带防止sql注入的功能,一开始还担心注入 ...
- Kubernetes 网络排错指南
本文介绍各种常见的网络问题以及排错方法,包括 Pod 访问异常.Service 访问异常以及网络安全策略异常等. 说到 Kubernetes 的网络,其实无非就是以下三种情况之一 Pod 访问容器外部 ...