Django——8 关系表的数据操作 表关联对象的访问 多表查询
Django
关系表的数据操作
在views中导入modles模型中的,Django7中创建的模型
from .models import Department, Student, Stu_Detail, Course
先给Department添加数据
def doo(request):
# department添加数据
d1 = Department(d_name='计算机').save()
Department.objects.get_or_create(d_name='外国语')
Department.objects.create(d_name='电子')
d4 = Department(d_name='美术').save() return HttpResponse('添加数据成功')
、
一对多的数据添加
Student添加数据
方法一:
# Student添加数据、方法一:直接添加
Student.objects.get_or_create(s_name='小明', department_id=1)
s2 = Student(s_name='小红', department_id=2).save()
方法二:
# 方法二查找后添加
d4 = Department.objects.get(d_name='美术')
s3 = Student(s_name='小美')
s3.department = d4
s3.save()
d3 = Department.objects.get(d_id=3) # 电子
s3 = Student(s_name='小草')
s3.department = d3
s3.save()

- 1.第一种方式就是跟之前的一样,用传参的方法添加,需要注意的是外键的值必须是关联表中已经存在的值.
- 2.第二种方式是用的属性赋值的方式,因为我们在模型类有定义了一个department的属性,而这个属性的对象的类型必须是department表的类实例对象
表关联对象的访问
在学生表和学院表之间进行关联对象的访问
这里我们通过python manage.py shell 来进行
先导入数据模型

通过s1的学院信息

Student的模型类中我们有定义department的属性,所以当我们去访问的时候,可以直接通过student.department的形式去找到某个学生的所属学院是哪个.
查看一个d1学院的所有学生 ()
如果模型I有一个ForeignKey,那么该ForeignKey 所指的模型II实例可以通过一个管理器回前面有ForeignKey的模型I的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称。
主键查看外键用_set.all()

可以在定义时设置related_name 参数来覆盖foo_set 的名称.
添加了related_name的参数后,重新打开一个IDLE,
访问时就能直接用设置的参数作为属性了.
这样使用_set的地方就可以用related_time来替换

现在给Course添加数据

在学生表中再添加一些数据:

现在再来查询一下学院1的所有学生

处理关联对象的方法
- add(obj1, obj2, ...) 添加的已经存在数据库的数据
- 添加一指定的模型对象到关联的对象集中。

注意Course的多对多属性student,现在
使学生1选择了课程1


使学生5选择了课程3


现在把再学院2的王五换到学院3



- create(**kwargs) 添加不存在的数据 ,将数据直接存入数据库
- 创建一个新的对象,将它保存并放在关联的对象集返回新创建的对象。
学院4来了个新同学小雅


remove(obj1, obj2, ...)
- 从关联的对象集中删除指定的模型对象。
- 删除的是关系表中的数据
首先先添加一些数据




clear() 从关联的对象集中删除所有的对象
注意对于所有类型的关联字段,add()、create()、remove()和clear()都会马上更新数据库。换句话说,在关联的任何一端,都不需要再调用save()方法。
多表查询——跨关联关系的查询
Django 提供一种强大而又直观的方式来“处理”查询中的关联关系,它在后台自动帮你处理JOIN。
若要跨越关联关系,只需使用关联的模型字段的名称,并使用双下划线分隔,直至你想要的字段:
查询学院名字为‘计算机学院’的学生的信息
# 查询学院名字为‘计算机’的学生的信息
res = Student.objects.filter(department__d_name='计算机')

查询学生名字中包含 '小' 的学生的学院信息
# 查询学生名字中包含 '小' 的学生的学院信息
res = Department.objects.filter(student__s_name__contains='小')


查询学号为1的学生所有的课程
# 查询学号为1的学生所有的课程
res = Course.objects.filter(student__s_id=1)

查询报了课程1的所有的学生
# 查询报了课程1的所有的学生
res = Student.objects.filter(course__c_id=1)

查询报了'python'课程的的学生的所属学院的信息
# 查询报了'python'课程的的学生的所属学院的信息
res = Department.objects.filter(student__course__name='python')

聚合查询

分组查询

F查询
from django.db.models import Q, F

Q查询

Django——8 关系表的数据操作 表关联对象的访问 多表查询的更多相关文章
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django模型基础(三)——关系表的数据操作
模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...
- MySQL表的创建和表中数据操作
这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...
- 【C++】私有数据成员不能用对象去访问吗
首先,必须清楚的是private和public限定的是类而不是对象.因此,在成员函数中访问同类对象的私有成员是完全可以的. 所以,某些教材上所说的“私有数据成员不能用对象去访问”是欠妥当的. 比如,如 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:表的数据操作
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:表实体类映射 下一篇:Farseer.net轻量级ORM开源框 ...
- django同时查询两张表的数据,合并检索对象返回
原始需求: 1.一篇文章内容分N个版块,每篇文章的版块数量不同. 2.有个文章搜索功能,需要同时搜索标题和内容. 实现思路: 1.由于每篇文章的内容版块数量不同,因此将每个文章的标题和内容分开存入2张 ...
- mysql 库,表,数据操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...
- day54-mysql-库、表、数据操作
. 什么是数据库 存储数据的仓库 . 什么数据: 大家所知道的都是数据.比如:你同学的名字,年龄,性别等等 . 数据库概念 .数据库服务器 .数据库管理系统 重点 .库 .表 .记录 .数据 参考画图 ...
- Django ORM中,如何使用Count来关联对象的子集数量
示例models 解决方法 有时候,我们想要获取一个对象关联关系的数量,但是我们不要所有的关联对象,我们只想要符合规则的那些关联对象的数量. 示例models # models.py from dja ...
随机推荐
- codevs1036商务旅行(LCA)
1036 商务旅行 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 某首都城市的商人要经常到各城镇去做 ...
- 写出更好的 JavaScript 条件语句
1. 使用 Array.includes 来处理多重条件 // 条件语句 function test(fruit) { if (fruit == 'apple' || fruit == 'strawb ...
- .Net application,Session,Cache简单比较
Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象.不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对 ...
- 鼠标单击到 img行的时候图片隐藏方案
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CF414B Mashmokh and ACM
思路: dp. 实现: 1.O(n5/2) #include <iostream> #include <cstdio> using namespace std; ; ][]; ...
- body全屏css/网页全屏设置/全屏样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ZUK 22(Z2131) 免解锁BL 免rec 保留数据 Magisk Xposed 救砖 ROOT ZUI 4.0.199
>>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...
- DetachedCriteria和Criteria的使用方法
DetachedCriteria和Criteria的使用方法 /* * 下载统计 * @return */ public String downloadStatistics(){ logger ...
- [Windows Server 2008] 服务器安全加固
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:服务器安全加固 ...
- Deutsch lernen (16)
1. die Übertragung, -en 转播,传播 Das Fernsehen sendet eine Übertragung des Fußballspiels. 2. ebenfalls ...