三种方式创建多对多外键方式及其优缺点。
外键的查询和使用
1外键的创建:
在数据库表中的表现形式
如何连表查询和使用
表里边: student_obj.cid_id=Class对像.id ; Student_obj.cid = Class对象
如何继续往查外键对应的数据 用查出来的 对象.cid.属性名 的方法来查 cid就表示Class表中的一个对象,即某一条记录
增加数据的写法
如何反向从被外键关联的对象中找到与他关联的数据 注意:当设置了related_name: 时候不能用此方法 默认用 related_name的值
当设置了related_name 时可以这样查找
查找使用方法
一对一正向查找
自动创建的第三章表,多对多关联表,所以不能通过ORM单独查询或者操作那个自动出现的表格
第三张表是独立的表,可以通过django ORM单独的对他进行去查找和更新
当想扩展第三那张,多对多的表进行单独查询或者操作,修改的时候用第三种方式,‘
否则一般用第二种
给第三个表加数据
正向查询(由学生表查询班级表)
查询学生的班级信息
反向查询(由班级表查询学生表)
查询班级的学生信息
如果不在外键的字段中设置related_name的话,默认就用表名_set。
如果设置了related_name="students",反向查询时可直接使用students进行反向查询。
表结构设计
正向查询(由学生信息表查询学生详情表)
反向查询(由学生详情表反向查询学生信息表)
正向查询(由老师表查询班级表)
反向查询(由班级表反向查询老师表)
"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。
它存在于下面两种情况:
create()
创建一个新的对象,保存对象,并将它添加到关联对象集之中,返回新创建的对象。
创建一个新的班级对象,保存对象,并将它添加到关联对象集之中。返回新创建的对象:
上面的写法等价于下面的写法,但是比下面的这种写法更简单。
add()
把指定的model
对象添加到关联对象集中。即多多对应的那张表中去
添加对象
添加id
add()括号中被传入的内容可以是 对象,也可以是id 值
set() 这个是设置(可以是对某些值的更改)
更新model对象的关联对象。 set 传入的列表对象不用打散 直接传入就可 add() 传入的需要打散
remove()
从关联对象集中移除执行的model对象
对于ForeignKey对象,这个方法仅在null=True时存在。
clear()
从关联对象集中移除一切对象。
同理,对于ForeignKey对象,这个方法仅在null=True时存在。
使用场景:
他是用于跨表查询的
正向使用:
要使用外键名__对应表的字段名 的方法来查找
反向使用
使用外键的related_name设置的名字 __字段名(关联表的字段名) 的方法
表的设计详见下图
在这之前我们所有的跨表查询都是基于对象的查询。
比如:
注意,双下方法是将写的内容作为条件放到筛选括号里边的, 如
models.Class.objects.filter(students__sname__contains="龙") 查找名字中有龙的学生 注意 students 是Class的一个外键, 通过他关联到Student 表
Django还提供了一种直观而高效的方式在查询中表示数据表之间的关联关系,它能自动确认 SQL JOIN 关系。
需要做跨关系查询时,就可以使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的 model 为止。
本文地址:http://mdekt.bhha.com.cn/quote/99.html 康宝晨资讯 http://mdekt.bhha.com.cn/ , 查看更多