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

多对多表中的用法:

在多对多的表中 正向查询

#基于对象的查询
#正查
# 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

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

  1. Django 关联管理器

    class RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: ForeignKey关系的"另一边&quo ...

  2. Django框架(16.Django中的模型类管理器以及自定义管理器)

    模型类.objects.all()->objects是一个什么东西呢? 答:objects是Django帮我自动生成的管理器对象,通过这个管理器可以实现对数据的查询. objects是model ...

  3. java怎么设置卡片布局_在Java中使用卡片布局管理器的方法

    在Java中使用卡片布局管理器的方法 发布时间:2020-12-03 16:05:18 来源:亿速云 阅读:85 作者:Leah 在Java中使用卡片布局管理器的方法?针对这个问题,这篇文章详细介绍了 ...

  4. php 去除实体,php – 如何在学说中正确关闭实体管理器

    我在Doctrine2脚本中遇到了内存泄漏问题,这个问题通常是由一段代码消除内存问题造成的. 在我知道你可以(并且应该)清除实体管理器之前,每20次迭代我做了以下事情: if ($this->u ...

  5. python中的with上下文管理器

    with 语句 with 语句是 Pyhton 提供的一种简化语法,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源. 在没有学习with的句法之前,通常我们都是 ...

  6. java 布局管理器_有时在Java中,一个布局管理器是不够的

    java 布局管理器 在开发Java Swing应用程序时,最经常的是,我们需要在多个嵌套面板中使用多个布局管理器. 这通常不是问题,被认为是几乎所有人类已知语言的所有UI开发的常规做法. 但是,大多 ...

  7. 有时在Java中,一个布局管理器是不够的

    在开发Java Swing应用程序时,最经常的是,我们需要在多个嵌套面板中使用多个布局管理器. 通常这不是问题,并且被认为是几乎所有人类已知语言的所有UI开发的常规做法. 但是,大多数情况下,对于UI ...

  8. 【Java】Java中GUI之布局管理器

    [概念] 布局管理器:是对容器中的元素进行布局管理,按照一定的规则将容器里面的元素或组件进行排放. [分类] 1.FlowLayout:流式布局管理器 2.BorderLayout:边框布局管理器 3 ...

  9. java中什么是布局管理器_Java中布局管理器

    布局管理器种类 FlowLayout: 组件在一行中从左至右水平排列,排满后折行,它是Panel.Applet的默认布局管理器. BorderLayout:北.南.东.西.中,它是Window.Fra ...

最新文章

  1. 让机器“自愈化”引领新科技变革
  2. spark 持久化 mysql_Spark读取数据库(Mysql)的四种方式讲解
  3. Mysql 从库跳过
  4. Java:14 个 Spring MVC 顶级技巧,随时用随时爽,一直用一直爽
  5. matlab神经网络函数
  6. flask bootstrap ajax,使用Flask集成bootstrap的方法
  7. 这款耳机堪比千元级的AirPods
  8. BZOJ 1270 雷涛的小猫 dp
  9. python中backward_pytorch的梯度计算以及backward方法详解
  10. centos系统中卸载软件【例子为卸载百度硬盘】
  11. iOS播放器 - AVPlayer
  12. python中列表是什么类型_Python数据类型之列表
  13. web前端js上传文件
  14. oracle交接单,系统交接单模板.docx
  15. 华三交换机配置vrrp_VRRP原理与配置 华为、华三交换机,路由器
  16. Python初探(一)
  17. 去掉word 2007中可恶的信息检索
  18. z-index的使用及注意事项
  19. 服务器系统盘在哪里,云服务器本地磁盘在哪里
  20. C语言编写可以实现malloc() free()功能的函数(空间/时间复杂度低)

热门文章

  1. python中RabbitMQ的使用(路由键模糊匹配)
  2. hadoop 分片与分块,map task和reduce task的理解
  3. Mac OS X终端的常用操作命令(UNIX指令)
  4. 算法 --- 判断某个值是否在二叉搜索树中
  5. Spring Cloud Gateway 路由转发之After(Before)路由断言工厂使用
  6. 小程序开发-利用canvas实现保存二维码海报到本机
  7. MySQL日志分类及性能分析你应该知道的知识
  8. Dynagen0.11+Pemuwrapper入手麻烦二三事——告诉初学者直路
  9. RichTextBox 右键显示 ContextMenuTrip
  10. linux开机和登陆欢迎信息