django ORM中的RelatedManager(关联管理器)

关联管理器应用在 一对多的表 或者 多对多的表

多对多表中的用法:

在多对多的表中 正向查询 

#基于对象的查询
#正查
# author_obj = Author.objects.get(id=1)
# print(author_obj)  #<Author object: 1 吴晓波>
# print(author_obj.book_set.all())   #出版过的所有的书    <QuerySet [<Book: 小王子>, <Book: 哈利波特>]>

在反向查询中会有用到关联管理器

#反向
# book_obj = Book.objects.get(id=1)
# print(book_obj)   #小王子#联合出版小王子这本书的所有作者
# print(book_obj.author.all())
#<QuerySet [<Author: <Author object: 1 吴晓波>>, <Author: <Author object: 3 俞敏洪>>]># 设置多对多关系
# author_obj = Author.objects.get(id=1)   ##<Author object: 1 吴晓波>
# author_obj.book_set.set([4,5])  # 要关联对象的ID  [ 对象的id,对象的id]
# 把书籍id=4 和 书籍id=5 的跟author id=1的绑定在一起,  author id=1之前绑定的给清除了
# print(author_obj.book_set.all())# author_obj.book_set.set(Book.objects.all())
# print(author_obj.book_set.all())  #把所有的书籍都跟author id=1的给绑定# 添加多对多的关系
# author_obj = Author.objects.get(id=2)  #author id = 2的
# author_obj.book_set.add(3)  # 要关联对象的ID   直接通过id找对象就类似于学生的学号,但是不确定这个学生到底在不在
#  类似于反向查询  在book表中找到 book id=3 的跟author id=2 的绑定
# print(author_obj.book_set.all())# author_obj = Author.objects.get(id=2)  #author id = 2的
# author_obj.book_set.add(Book.objects.get(id=2))  # 要关联对象
# #这种方法就类似于直接找到学生 再把学生叫过来 然后绑定关系
# print(author_obj.book_set.all())# 删除多对多关系
# author_obj = Author.objects.get(id=1)
# author_obj.book_set.remove(1)  # 要关联对象的id
# #  找到book表中id=1 的 删除和author id=1 之间的关系
# print(author_obj.book_set.all())# author_obj = Author.objects.get(id=1)
# author_obj.book_set.remove(Book.objects.get(id=2))  # 要关联对象
# #  把book表中的对象找出来  然后处理和author的关系
# print(author_obj.book_set.all())# 清空当前对象的多对多的关系
# author_obj = Author.objects.get(id=1)
# author_obj.book_set.clear()  #解除所有的绑定关系
# print(author_obj.book_set.all())#创建一条多对多的关系 create()
author_obj = Author.objects.get(id=1)
author_obj.book_set.create(title='太亮教抛光',price=50)
print(author_obj.book_set.all())

多对一表中的用法:

#基于对象的查询   正向查询
book_obj = models.Book.objects.get(id=1)  #拿到第一个book对象
# print(book_obj)   #                                      <Book object: 1 小王子>
# print(book_obj.title)  #                                 小王子
# print(book_obj.publisher)    #正查按字段  书的出版社     沙河出版社
# print(book_obj.publisher_id) #这本书对应的出版社的id     1
#  反向查询
# pub_obj = models.Publisher.objects.get(id=3)
# print(pub_obj.name) #人民出版社# 反向查询    查询出版社出的所有书籍
# ret = pub_obj.book_set.all()
# print(ret)
# <QuerySet [<Book: 解忧杂货普>, <Book: 精进>]># ret = pub_obj.books.all()   # related_name='books' 反向查询时使用 不用再用表名小写_set了
# print(ret)  #<QuerySet [<Book: 解忧杂货普>, <Book: 精进>]># 基于字段的查询
# 查沙河出版社出版的书
# ret = models.Book.objects.filter(publisher__name="沙河出版社")
# print(ret)# ret = Book.objects.filter(publisher__name="沙河出版社")#找 精进这本书 的出版社是哪个  反查    指定了related_name='books'
# ret = Publisher.objects.filter(books__title="精进")#不指定related_name
# ret = Publisher.objects.filter(book__title="精进")
# print(ret)#  Django ORM 之 关联管理器(RelatedManager)   *********
# “关联管理器”是在一对多或者多对多的关联上下文中使用的管理器
# 对于ForeignKey对象,这个方法仅在null=True时存在
# 外键字段可以为null 才有remove和clear  只能写对象
# 外键 在Book 表中
# id为1的出版社  出版过的书籍
pub_obj = Publisher.objects.get(id=1)
print(pub_obj.book_set.all())  #<QuerySet [<Book: 小王子>, <Book: 三国>]># 从关联对象集中移除执行的模型对象        remove(一个对象)
ret = pub_obj.book_set.remove(Book.objects.get(id=1))
print(ret)pub_obj.books.clear()pub_obj.books.create(title='太亮的产后护理')

 

转载于:https://www.cnblogs.com/kenD/p/10079700.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html 手写字效果,canvas画布实现手写签名效果的示例代码

最近项目中涉及到移动端手写签名的功能需求&#xff0c;将实现代码记录于此&#xff0c;供小伙伴们参考指摘哦~HTML代码&#xff1a;手写区清除确定CSS样式&#xff1a;.mSign_signMark_box{padding: 15px 15px 26px 15px;}.mSign_signMark_footer{max-width:640px;margin:0 au…

ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET

这是一个已经移植到 .NET 的 ADO 应用的例子。也演示了单向、只读、快速 DataReader 的使用。它演示如何使用 DataView 类从 DataSet 获取一个 Table 和 操作一个类似于旧的 ADO 记录集模型。请记得&#xff0c;ADO 记录集仅仅包含一个 Table 的数据&#xff0c;但是 ADO.NET D…

FTP云盘

参考&#xff1a;FTP云盘项目 作者&#xff1a;糯米啊啊 发布时间&#xff1a; 2021-08-19 10:34:05 网址&#xff1a;https://blog.csdn.net/weixin_43732386?spm1001.2014.3001.5509 参考&#xff1a;自制FTP云盘项目 作者&#xff1a;不说话的小脑斧 发布时间&#xff1a; …

html transform属性,css3 transform属性详解

CSS3变形是一些效果的集合&#xff0c;比如平移translate() 、旋转rotate()、缩放scare()和倾斜skew()效果&#xff0c;每个效果都被称作为变形函数(Transform Function),它们可以操控元素发生旋转、缩放、和平移等变化。CSS3的2D transform函数包括了translate()、scale()、ro…

UIApplication的作用

1.设置app图标右上角的数字2.设置状态栏的属性&#xff08;样式、是否要显示&#xff09;3.打开某个链接\发短信\打电话4.keyWindow : 访问程序的主窗口&#xff08;一个程序只能有一个主窗口&#xff09;5.windows : 访问程序中的所有窗转载于:https://www.cnblogs.com/gatsby…

PHP调用新浪API 生成短链接

我们经常收到类似于这样的短信&#xff08;如下图&#xff09;&#xff0c;发现其中的链接并不是常规的网址链接&#xff0c;而是个短小精悍的短链接&#xff0c;产品中经常需要这样的需求&#xff0c;如果在给用户下发的短信中是一个很长的连接&#xff0c;用户体验肯定很差&a…

Chrome如何下载网页视频

目录第一步&#xff1a;右键&#xff0c;选择「检查」指令&#xff0c;进入代码控制面板第二步&#xff1a;单击代码面板左上角红色标出来的按钮&#xff0c;然后鼠标移到左边视频上第三步&#xff1a;双击src后面的代码&#xff08;全部展开&#xff09;&#xff0c;复制粘贴到…

使用MUTT步骤

使用MUTT&#xff0c;以下是步骤&#xff1a;1.1、首先确认一下MUTT是被已经安装 [oracledevdb02 ]$ rpm -aq | grep muttmutt-1.4.1-11.rhel41.2、检查系统是否安装中文字符集 [oracledevdb02 ]$ locale -a | grep zh_CNzh_CNzh_CN.gb18030zh_CN.gb2312zh_CN.gbkzh_CN.u…

html iso标准文档,HTML ISO-8859-1 参考手册

HTML ISO-8859-1 参考手册ISO(全称 International Standards Organization)为不同的字母/语言定义了标准的字符集。在 HTML 4.01 中&#xff0c;ISO-8859-1 是默认的字符。现代的浏览器支持的字符集&#xff1a;ISO-8859-1ISO-8859-1 是大多数浏览器默认的字符集。ISO-8859-1 的…

单链表反转

参考&#xff1a;【图文解析】反转一个单链表 作者&#xff1a;giturtle 发布时间&#xff1a; 2019-03-18 15:26:38 网址&#xff1a;https://blog.csdn.net/qq_42351880/article/details/88637387?spm1001.2014.3001.5501 目录例题描述思路代码实现例题描述 反转一个链表 …

Unity优化总览

CPU GC 序列化与反序列化,如protobuff,json解析String的频繁构造,拼接,如ToString()会生成字符串,Object.name会返回拷贝闭包和匿名函数,在闭包中调用外部变量时会创建临时class对象,匿名函数当做参数传入时,也会有内存开销有开销的函数,如Camera.main等,缓存一下Transform只存…

Rake的使用

Rake 是一套类似 Make 的 Builder 工具&#xff0c;让我们可以编写一些脚本任务&#xff0c;并且很方便设定各任务的相依性。在 Rails 之中就內建了许多 rake 指令&#xff0c;除了你已经使用过的 rake db:migrate 之外&#xff0c;还有例如&#xff1a;rake db:migrate rake d…

html5 usb调试,USB调试怎么打开 USB调试模式打不开怎么刷机

2016-04-25 16:58:28USB调试怎么打开 USB调试模式打不开怎么刷机标签&#xff1a;USB调试,刷机,recovery模式,卡刷【ROM之家】在手机很多应用使用时需要打开USB调试&#xff0c;比如连接电脑&#xff0c;刷机等操作。但有时候会遇上USB调试模式打不开&#xff0c;可能会选择刷机…

this 和super关键字

一、this 关键字 this关键字代表的就是函数所属的调用者。this关键字的作用&#xff1a; 1.如果存在同名的成员变量与局部变量时,在方法内部默认的时访问的时局部变量,可以通过this关键字调用成员变量 2.在一个构造方法中调用另一个构造方法来初始化对象this关键字要注意…

MODBUS通讯协议详解(基于485)

参考&#xff1a;灵育科技Modbus课程总结 作者&#xff1a;Naunyang 时间&#xff1a;2020-11-23 13:51:58 网址&#xff1a;https://blog.csdn.net/Naunyang/article/details/108740456?spm1001.2014.3001.5502 参考&#xff1a;MODBUS用于单片机通讯 作者&#xff1a;hillch…

C\C++与Java中的static关键字

C\C里面的static&#xff1a; 面向过程的static&#xff1a; 在c和c面向过程的设计里&#xff0c;在全局变量前加上static关键字则可将该变量定义为一个静态全局变量&#xff0c;比如&#xff1a; static int a; 那么c和c中的静态全局变量有什么特点呢&#xff1a; 1、 变…

步进电机、伺服电机、舵机、无刷电机、有刷电机区别

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

56、servlet3.0-与SpringMVC整合分析

56、servlet3.0-与SpringMVC整合分析 web容器在启动的时候&#xff0c;会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer加载这个文件指定的类SpringServletContainerInitializerspring的应用一启动会加载感兴趣的WebApplicationInitializer接…

html提交form预处理,HTML5 之图片上传预处理

在开发 H5 应用的时候碰到一个问题&#xff0c;应用只需要一张小的缩略图&#xff0c;而用户用手机上传的确是一张大图&#xff0c;手机摄像机拍的图片好几 M&#xff0c;这可要浪费很多流量。获取图片通过 File API 获取图片。var input document.createElement(input);input…

PID算法实现温控

参考&#xff1a;PID算法 作者&#xff1a;hillchina 发布时间&#xff1a; 2016-09-28 21:48:04 网址&#xff1a;https://www.bilibili.com/video/BV1Ds411t7Hr 以上完整的视频教程在腾讯课堂里有&#xff0c;在腾讯课堂里搜索PID&#xff0c;找到灵育科技&#xff0c;课程对…