欢迎光临散文网 会员登陆 & 注册

Django学习笔记:多表关系映射

2023-07-08 23:09 作者:星空收集者  | 我要投稿

一对一关系

类的属性值是author,但是生成的sql表的字段是author_id,指向author表的字段:id

在一对一中,添加数据有两种补充外键指向的方式

第一种,通过属性值=对象的方式添加
第二种,通过表的外键=数据id方式添加

值得注意的是,一对一的关系要求了两个wife无法指向同一个author,一旦执行,就会报错

正向查询关联的对象信息
反向查询关联的对象信息

不得不说,django在这方面做的优化确实很方便,减少开发者用join来做多表联立查询的次数

一对多关系

数据插入和正向查询

但是反向就不能直接用类名小写了,因为会报错:

我们有两种方法,最推荐的还是直接'小写类名_set'属性值来获取携带关联信息的类似于objects的对象,和objects一样,后面可以接all( ),filter( )来获取制定数据。

两种等价的写法

如上图所示,第二种方法和第一种方法其实是等价的,但是显然第一种更方便一点,不必再显式的利用关联信息去筛选。

多对多关系

多对多的关系的增加和一对多类似,一对多的正向查询得到是一个对象,而多对多无论是正向查询还是反向查询得到的都是多个对象的集合。

既可以正向添加关系,也可以反向添加,可以说是非常灵活了。值得注意的是,方法一和方法二哪怕都执行了也是不会有额外重复的效果,也就是说,关系只能添加一次。

其实创建对象和建立关系可以合为一步,只需把add函数改成create函数即可。

正向和反向都可以有这种用法:

正向查询和反向查询也是类似的用法,这里不再赘述。


Django学习笔记:多表关系映射的评论 (共 条)

分享到微博请遵守国家法律