前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Django基础篇-表关联对象

Django基础篇-表关联对象

作者头像
小团子
发布于 2019-07-18 03:09:26
发布于 2019-07-18 03:09:26
1.3K0
举报
文章被收录于专栏:数据云团数据云团
  • 表关联对象
  • 多表查询

学生的学院 —— 正向查

学院的学生 —— 反向查

①表关联对象

可以在项目目录下通过 python manage.py shell 进入到当前目录下的 python 的 idle。

  • 前向查询

如果一个模型具有 ForeignKey,那么该模型的实例将可以通过属性访问关联的(外部)对象。

>>> from .models import Department, Student, Course

>>> s1 = Students.objects.get(s_id=1)

>>> s1

<Student: Student<s_id=1,s_name=yuntuan>>

>>> s1.department

<Department: Department<d_id=5,d_name=IT>>

# 学院

# 学生

# 课程

# 成绩

可以通过外键属性获取和设置。对外键的修改不会保存到数据库中,直至调用 save()。

  • 反向查询

如果模型 1 有一个 ForeignKey,那么该 ForeignKey 所指向的模型 2 实例可以通过一个管理器 返回前面有 ForeignKey 的模型 1 的所有实例。

默认情况下,这个 管理器 的名字为 foo_set,其中 foo 是源模型的小写名称。

  • 可以在 ForeignKey 定义时设置 related_name 参数来覆盖 foo_set 的名称。

# 例如:Student 模型改成

department = models.ForeignKey('Department', related_name='student'),那么实例代码改成这样

  • 处理关联对象的其他方法

add(obj1, obj2, ...)

添加的已经存在数据库的数据

添加指定的模型对象到关联的对象集中。(一对多,多对多)

create(**kwargs)

添加不存在的数据,将数据直接存入数据库,创建一个新的对象,将它保存并放在新创建的对象。(一对一,多对多)

remove(obj1, obj2, ...)

从关联的对象集中删除指定的模型对象。(多对多)

删除的是关系表中的数据

clear()

从关联的对象集中删除所有的对象。(多对多)

>>> s3.course.clear()

注意:

对于所有类型的关联字段,add()、create()、remove() 和 clear()都会马上更新数据库。在关联的任何一端,都不需要再调用 save() 方法。

直接赋值

②多表查询

Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理 JOIN。 若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:

这种跨越可以是任意的深度。

它还可以反向工作。若要引用一个“反向”的关系,只需要使用该模型的小写的名称。

当你基于 ManyToManyField 或反向的 ForeignKey 来过滤一个对象时,有两种不同种类的过滤器。考虑 Department/Student 关联关系 (一对多的关系)。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django——model基础
ORM 映射关系:     表名 <-------> 类名 字段 <-------> 属性     表记录 <------->类实例对象 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄。 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email。 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作
用户1214487
2018/01/24
1.1K0
Django——model基础
06.Django基础五之django模型层(二)多表操作
    一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束。
changxin7
2019/09/29
2.7K0
django 模型关系
比如汽车和制造商的例子,一辆汽车只能属于一个制造商,但是一个制造商有多辆汽车,这个关系,用Django的Model来表示,就是
程序员同行者
2018/08/16
1.4K0
django 1.8 官方文档翻译: 2-3-2 关联对象参考
“关联管理器”是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:
ApacheCN_飞龙
2022/11/27
4860
Django学习笔记之ORM多表操作
作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息。作者详情模型和作者模型之间是一对一的关系(one-to-one)
Jetpropelledsnake21
2018/08/10
2.8K0
Django学习笔记之ORM多表操作
Django之ForeignKey和ManyToManyField多表查询
多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案.
菲宇
2022/12/21
1.8K0
Django之模型层(多表操作)
  一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多’的一方,出版社是‘一’的一方,我们在建立模型的时候,把外键写在‘多’的一方,即我们要把外键写在book类。
py3study
2020/01/19
6210
Django基础篇-模型表关系
在 Mysql 中一对多是通过外键实现的,在 django 模型中通过 ForeignKeyField 类型实现。
小团子
2019/07/18
8720
Django基础篇-模型表关系
django 1.8 官方文档翻译: 2-2-1 执行查询
一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。关于所有模型检索选项的详细内容,请见数据模型参考。
ApacheCN_飞龙
2022/11/27
4.4K0
Django中ORM介绍和字段及其参数
ORM介绍 ORM概念   对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。   简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。   ORM在业务逻辑层和数据库层之间充当了桥梁的作用。 ORM的由来   字母‘O’起源于“对象”(Object),'R'代表“关系”(Relational)。   几乎所有的软件开发过程中都会涉及到对象和关系数据库。在用户层面和业
新人小试
2018/04/12
2.9K0
Django中ORM介绍和字段及其参数
django 1.8 官方文档翻译:2-1-1 模型语法
模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。
ApacheCN_飞龙
2022/11/27
5K0
Django操作数据库
本篇主要介绍我们在使用django框架开发的时候使用的操作数据库的语句,这在动态网站部分是很重要的,因为我们需要连接数据库进行操作,然后把数据处理的结果显示在前端页面上,在其他地方我们都是直接用sql语句来手动输入,这样容易造成错误,还影响效率,在django中,内置了很多处理数据库操作的函数,能更便利的帮我们操作数据库
earthchen
2020/09/21
3910
django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)
模型是有关你的数据的,简单、确定的信息源。它包含了你所储存数据的一些必要的字段和行为。通常来说,每个模型都对应数据库中的一张表。
ApacheCN_飞龙
2022/11/27
3.2K0
Django之ORM 外键关联(三)
Django 的 ORM 是创建 SQL 去查询和操作数据库的一个 Python 式的方式。
小团子
2019/07/18
2.2K0
Django之ORM 外键关联(三)
Django之Model操作数据库详解
O(objects):类和对象。R(Relation):关系,关系数据库中的表格。M(Mapping):映射。
菲宇
2022/12/21
7.1K0
Django之ORM字段和参数
字段 常用字段 ---- AutoField                                                                                                                                                                                                                                         
人生不如戏
2018/04/12
2.3K0
Django 模型层之多表操作
Django还提供了一种直观而搞笑的方式在查询(lookups)种表示关联关系,它能自动确认SQL JOIN联系。要做跨关系查询,就使用两个下划线来连接模型(model)间关联字段的名称,知道最终链接到你想要的model为止。
py3study
2020/01/18
1.3K0
Django中的关系映射
级联删除,例如员工表中一项数据是部门ID,部门ID是部门表的主键,如果是级联删除,当删除了部门A的时候,会把所有属于部门A的员工都给删除。
Yuou
2022/09/26
1.7K0
Django ORM 多表操作
ps:外键字段不需要写表名_id后面的_id,ORM创建的时候自动添加了_id,以及外键以虚拟字段的形式存在
HammerZe
2022/03/25
1.8K0
Django ORM 多表操作
python 终级篇 django --
                                   一般操作                                             
py3study
2020/01/19
2.9K0
python 终级篇 django --
相关推荐
Django——model基础
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文