DjangoORM一对多&多对多操作
简要说明
通过操作对象的方式操作数据库
详细步骤
通过操作对象的方式操作数据库
models.py的结构是:

如果models.py中外键定义没有写 related_name=’student_teacher’, 可以直接用
studentList = teacher.student_teacher.all() 可以改写成:
teacher = Teacher.objects.get(id = 1)
studentList = teacher.student_set.all()
============================================================================================
from myblog.models import Student,Teacher
def student_list(request):
t = loader.get_template("student_list.html")
#studentList = Student.objects.all()
teacher = Teacher.objects.get(id = 1)
studentList = teacher.student_teacher.all()
c = Context({"studentList":studentList})
return HttpResponse(t.render(c))
数据库一对多的操作:
查找:
方法一:
通过Student表来查:
查找Student表中,teacher_id为1的老师名称
studentList = Student.objects.all()
模板中使用:
student.teacher.name来获取外键的name属性值
方法二:
通过Teacher表来查:
teacher = Teacher.objects.get(id = 1) #先查到id 为1 的teacher
studentList = teacher.student_teacher.all() #通过外键查到studentlist
新增
方法一:
通过teacher得到student_set来创建
teacher.student_set.create(name = "tom",...)
方法二:
创造一个student对象,添加到teacher的student_set属性中
student = Student(name = "tom",....)
teacher.student_set.add(student)
修改
只删除student
teacher = Teacher.objects.get(id = 1)student = teacher.student_set.get(id = 1)student.delete()
删除和该teacher相关的所有student
teacher = Teacher.objects.get(id = 1)student = teacher.student_set.get(id = 1)student.teacher.delete()
数据库多对多操作:
group = Group.objects.get(id = 1)studentList = group.members.all()groupList = student.group_set.all()MemberShip(group = newGroup, student=newStudent).save()
DjangoORM一对多&多对多操作的更多相关文章
- Django一对多,多对多操作
简要说明 Django里面的数据库操作O2O&M2M,一般归属于models管理 使用场景 一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了).//两个表的 ...
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- Spring Data JPA 的一对多,一对多,多对多操作
一对一的关联关系 需求:用户与角色的一对一的关联关系 用户:一方 角色:一方 创建 Users 实体 @Entity @Table(name = "t_users") ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- 使用NHibernate(7)-- 一对一 && 一对多 && 多对多
1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...
- Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射
1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一 多对一/一对多, 多对多{类中的定义方法} day69 1. 昨日内容回顾 1. 单表增删改查 2. 单表查询API 返回QuerySet对象的: 1 ...
- 基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询
基于对象的跨表查询 一对多查询(班级表和学生表) 表结构创建 class Class(models.Model): id = models.AutoField(primary_key=True) cn ...
- mybatis的执行流程 #{}和${} Mysql自增主键返回 resultMap 一对多 多对一配置
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在 ...
随机推荐
- WinForm DataGridView看似刷新的问题
昨天同事winform遇到一个问题, 窗体上有一个时间控件,和一堆文本,下拉控件,时间控件是每秒都在动态走的 窗体下发一个DataGridView 控件显示保存后的数据 保存的数据库是在另一台机器B上 ...
- Sql Server 2008开发版(Developer Edition)过期升级企业版(Enterprise Edition)失败后安装学习版(Express Edition)
最近一个多月,甚是悠哉,无事可做.上线的网站系统也没接到客户的反馈,反而觉得无聊之极了.上周五早上,一上QQ,就收到客户发来消息,管理平台无法登陆了.心里一惊,立马开始查找故障原因.翻看了系统日志,提 ...
- C++ Primer 读书笔记: 第8章 标准IO库
第8章 标准IO库 8.1 面向对象的标准库 1. IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于 ...
- OC语法10——@protocol协议,
参考资料:博客 @protocol,协议: OC中protocol的含义和Java中接口的含义是一样的,它们的作用都是为了定义一组方法规范. 实现此协议的类里的方法,必须按照此协议里定义的方法规范来. ...
- mysql学习(三)
//解决linux下不能远程登陆的方法 http://www.blogjava.net/jasmine214--love/archive/2011/01/14/342981.html mysql数据类 ...
- Python进阶之map()、reduce()、filter()
map()函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB",&q ...
- hadoop笔记之Hive的管理(web界面方式)
Hive的管理(二) Hive的管理(二) Web界面方式 端口号9999 启动方式:hive --service hwi 通过浏览器来访问:http://<IP地址>:9999/hwi/ ...
- 让2个并列的div根据内容自动保持同等高度js
有左右2个并列的div,2个div都不能限定高度.左div为导航,右div为内容.如何能让左div块自动获得和右div块相等的高度? 同时,也有网友提问到“如果右块高度比左块低,会不会导致左块的内容被 ...
- C# Socket SSL通讯笔记
一.x.509证书 1.制作证书 先进入到vs2005的命令行状态,即:开始-->程序-->Microsoft Visual Studio 2005-->Visual Studio ...
- JEECMS用法总结
1.循环打印栏目: [@cms_channel_list] [#list tag_list as c] <li id="${c.path}"><a href=&q ...