九.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) 外键和一对一关系的 ...
随机推荐
- nginx常用场景
1.浏览器缓存 server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_s ...
- 斐波那契数列(C#)
斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:1.1.2.3.5.8.13 ...
- Bootstrap table 行编辑导航
/*开启表格编辑方向键导航 方向键(←): VK_LEFT (37) 方向键(↑): VK_UP (38) 方向键(→): VK_RIGHT (39) 方向键(↓): VK_DOWN (40) */ ...
- 西湖论剑2019-msc之奇怪的TTL
msc1给了一串很长的TTL字符,参考一些隐写的文章,猜测是在ttl中藏了信息,题目是这样的 我们截获了一些IP数据报,发现报文头中的TTL值特别可疑,怀疑是通信方嵌入了数据到TTL,我们将这些TTL ...
- Vue.js02:数据绑定v-model用法
<!-- v-model 实现数据的双向绑定 --> <!-- v-model 只能用在表单元素中 --> 示例: <!DOCTYPE html> <!-- ...
- Visual Studio Code自定义快捷键(eclipse习惯)
左下角设置按钮 -> Keyboard Shortcuts -> keybindings.json. [ { "key": "alt+/", &qu ...
- java中的重写与重载
重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类 ...
- Running Spark Streaming Jobs on a Kerberos-Enabled Cluster
Use the following steps to run a Spark Streaming job on a Kerberos-enabled cluster. Select or create ...
- .NET方法无限传参数技术
是否有这样的需求在创建函数时参数个数不固定,又不想使用重载,那么下面这个技术就比较适合. 相信你一定见过下面这的代码: ); Format 就是string的一个函数,第一个参数是固定的字符串类型,那 ...
- css 3 新特性
CSS3的新特性大致分为以下六类 1.CSS3选择器 2.CSS3边框与圆角 3.CSS3背景与渐变 4.CSS3过渡 5.CSS3变换 6.CSS3动画 下面分别说一说以上六类都有哪些内容 CSS3 ...