Ⅰ.关系表的数据操作

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. Jinja2用法总结

    Jinja2用法总结   一:渲染模版 要渲染一个模板,通过render_template方法即可. @app.route('/about/') def about(): # return rende ...

  2. Doctype的作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义?

    Doctype作用?严格模式与混合模式,如何触发者这两种模式,区分它们有何意义? 1.1 Doctype作用 <!DOCTYPE>声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该 ...

  3. 小米5.0以上系统如何没ROOT激活xposed框架的经验

    在较多企业的引流或者业务操作中,大多数需要使用安卓的黑高科技术xposed框架,这段时间,我们企业购买了一批新的小米5.0以上系统,大多数都是基于7.0以上版本,大多数不能够获取Root的su超级权限 ...

  4. springboot模块

    1.web <dependency> <groupId>org.springframework.boot</groupId> <artifactId>s ...

  5. SQL Server一致性错误修复案例总结

    今天遇到了一个关于数据库一致性错误的案例.海外工厂的一台SQL Server 2005(9.00.5069.00 Standard Edition)数据库在做DBCC CHECKDB的时候出现了一致性 ...

  6. mssql sqlserver 将字段null(空值)值替换为指定值的三种方法分享

    摘要: 下文将分享两种将字段中null值替换为指定值的方法分享,如下所示: 实验环境:sqlserver 2008 R2 例: )) go insert into test(info)values(' ...

  7. iBatis第二章:搭建一个简单的iBatis开发环境

    使用 iBatis 框架开发的基本步骤如下:1.新建项目(iBatis是持久层框架,可以运用到java工程或者web工程都可以) 这里我们建立一个 web 工程测试. 2.导入相应的框架 jar 包 ...

  8. SqlServer无备份下误删数据恢复

    系统已上线,给客户修改bug的时候,使用delete语句删表数据,没想到库没切换成测试库.误删了正式库的数据,而且一次备份都没有做过,玩大了 不扯了,进入主题 网上很多方法,都是针对至少有一次备份的情 ...

  9. Eclipse 模板

    Eclipse 的模板:推荐一个好的内容 设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开C ...

  10. Codeforces #541 (Div2) - D. Gourmet choice(拓扑排序+并查集)

    Problem   Codeforces #541 (Div2) - D. Gourmet choice Time Limit: 2000 mSec Problem Description Input ...