Ⅰ.关系表的数据操作

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模型基础(三)之关联对象操作及多表查询的更多相关文章

  1. Django框架基础知识08-表关联对象及多表查询

    1.自定义主键字段的创建 AutoFiled(pirmary_key=True) # 一般不会自定义,int类型,自增长 一般不自定义主键. 2.order_by asc desc from djan ...

  2. Django——8 关系表的数据操作 表关联对象的访问 多表查询

    Django 关系表中的数据操作 表关联对象的访问 关联对象的add方法 create方法 remove方法 clear方法 多表查询 查询补充 聚合查询 分组查询 F查询 Q查询 关系表的数据操作 ...

  3. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  4. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  5. Django模型基础(三)——关系表的数据操作

    模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...

  6. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  7. Mysql基础(四):库、表、记录的详细操作、单表查询

    目录 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细操作 3. 表的详细操作 4. 行(记录)的详细操作 5. 单表查询 数据库03 /库.表.记录的详细操作.单表查询 1. 库的详细 ...

  8. django模型基础(三)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...

  9. Django 学习第八天——Django模型基础第三节

    一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...

随机推荐

  1. 微信小程序 选择微信自带的地址 用户授权选择了拒绝

    // 选择微信自带地址 addAddr:function () { wx.chooseAddress({ success: function (res) { self.setData({ addrIn ...

  2. 魅族5.0以上设备(亲测有效)激活Xposed框架的流程

    对于喜欢研究手机的哥们来说,大多时候会使用到Xposed框架及种种功能强大的模块,对于5.0以下的系统版本,只要手机能获得ROOT权限,安装和激活Xposed框架是比较简单的,但随着系统版本的持续更新 ...

  3. 搭建Linux虚拟服务器

    1.搭建Linux虚拟机环境安装VMware Workstation 14下载地址:https://www.cr173.com/soft/68480.html密钥:FF31K-AHZD1-H8ETZ- ...

  4. 【已采纳】charles工具使用心得

    1.下载charles 可以去charles官网下载,下载地址:http://www.charlesproxy.com/download/    根据自己的操作系统下载对应的版本,然后进行安装,然后打 ...

  5. Redis笔记-Sentinel哨兵模式

    Redis以主从的模式搭建集群后,如果主节点Master挂掉,虽然可以实现将备用节点Slave切换成主节点,但是Redis本身并没有自动监控机制,需要借助Sentinel哨兵模式,实现监控并实现自动切 ...

  6. firewalld简介及功能

    1. firewalld简介 firewalld是CentOS7/Red Hat7的一大特性,最大的好处有两个: 第一个支持动态更新,不用重启服务: 第二个就是加入了防火墙的zone概念 firewa ...

  7. mysql中几个日期时间类型之间的区别和使用

    MySQL中有如下几个时间类型:date.time.datetime.timestamp.year MySQL数据类型           含义 date                     只存 ...

  8. springboot 应用中静态资源下载

    一. 场景介绍 Excel模板静态资源在,应用中的static文件夹中,文件名称包含中文; 需求:页面直接访问下载Excel模板. 二.目录结构 三.后台代码 @GetMapping("/d ...

  9. node+mysql,实现基本的增删改查,附带跟踪记录和运行时间记录

    Node + mysql 实现基础的增删改查,以及性能测试. 网上有很多这样的例子,我也是找来学习的. 感觉node对mysql的操作非常简单,也很实用,比如自带防止sql注入的功能,一开始还担心注入 ...

  10. Kubernetes 网络排错指南

    本文介绍各种常见的网络问题以及排错方法,包括 Pod 访问异常.Service 访问异常以及网络安全策略异常等. 说到 Kubernetes 的网络,其实无非就是以下三种情况之一 Pod 访问容器外部 ...