class RelatedManager

"关联管理器"是在一对多或者多对多的关联上下文中使用的管理器。它存在于下面两种情况:

ForeignKey关系的“另一边”。像这样:

from django.db import modelsclass Reporter(models.Model):# ...passclass Article(models.Model):reporter = models.ForeignKey(Reporter)

在上面的例子中,管理器reporter.article_set拥有下面的方法。

ManyToManyField关系的两边:

class Topping(models.Model):# ...passclass Pizza(models.Model):toppings = models.ManyToManyField(Topping)

这个例子中,topping.pizza_set 和pizza.toppings都拥有下面的方法。

add(obj1[, obj2, ...])

把指定的模型对象添加到关联对象集中。例如:>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.add(e) # Associates Entry e with Blog b.
在上面的例子中,对于ForeignKey关系,e.save()由关联管理器调用,执行更新操作。然而,在多对多关系中使用add()并不会调用任何 save()方法,而是由QuerySet.bulk_create()创建关系。延伸:# 1 *[]的使用
>>> book_obj = Book.objects.get(id=1)
>>> author_list = Author.objects.filter(id__gt=2)
>>> book_obj.authors.add(*author_list)# 2 直接绑定主键
book_obj.authors.add(*[1,3])  # 将id=1和id=3的作者对象添加到这本书的作者集合中# 应用: 添加或者编辑时,提交作者信息时可以用到.

create(**kwargs)

创建一个新的对象,保存对象,并将它添加到关联对象集之中。返回新创建的对象:>>> b = Blog.objects.get(id=1)
>>> e = b.entry_set.create(
...     headline='Hello',
...     body_text='Hi',
...     pub_date=datetime.date(2005, 1, 1)
... )# No need to call e.save() at this point -- it's already been saved.
这完全等价于(不过更加简洁于):>>> b = Blog.objects.get(id=1)
>>> e = Entry(
...     blog=b,
...     headline='Hello',
...     body_text='Hi',
...     pub_date=datetime.date(2005, 1, 1)
... )
>>> e.save(force_insert=True)
要注意我们并不需要指定模型中用于定义关系的关键词参数。在上面的例子中,我们并没有传入blog参数给create()。Django会明白新的 Entry对象blog 应该添加到b中。

remove(obj1[, obj2, ...])

从关联对象集中移除执行的模型对象:>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.
对于ForeignKey对象,这个方法仅在null=True时存在。

clear()

从关联对象集中移除一切对象。>>> b = Blog.objects.get(id=1)
>>> b.entry_set.clear()
注意这样不会删除对象 —— 只会删除他们之间的关联。就像 remove() 方法一样,clear()只能在 null=True的ForeignKey上被调用。

set()方法

先清空,在设置,编辑书籍时即可用到

注意

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

直接赋值:

通过赋值一个新的可迭代的对象,关联对象集可以被整体替换掉。

>>> new_list = [obj1, obj2, obj3]
>>> e.related_set = new_list
如果外键关系满足null=True,关联管理器会在添加new_list中的内容之前,首先调用clear()方法来解除关联集中一切已存在对象的关联。否则, new_list中的对象会在已存在的关联的基础上被添加。  

Django 关联管理器相关推荐

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

    关联管理器应用在 一对多的表 或者 多对多的表 多对多表中的用法: 在多对多的表中 正向查询 #基于对象的查询 #正查 # author_obj = Author.objects.get(id=1) ...

  2. django 1.8 官方文档翻译: 2-5-1 管理器 (初稿)

    Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质. 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html ...

  3. django 1.8 官方文档翻译: 2-5-1 管理器

    管理器 class Manager 管理器是一个接口,数据库查询操作通过它提供给django的模型.django应用的每个模型至少拥有一个 管理器. 管理器类的工作方式在 执行查询文档中阐述,而这篇文 ...

  4. 在手机测试html,借助 IIS 管理器 -- 用手机测试HTML页面

    win 2008R2服务器 IIS配置:IIS需要创建网站.配置网站.设置应用程序池回收时间. Hadoop的作业调度器主要有三种:FIFO ,Capacity Scheduler 和Fair Sch ...

  5. Django学习笔记(3):使用模型类进行查询(查询函数、F对象、Q对象、聚合函数、查询集、模型类关系、关联查询、自关联、管理器)

    文章目录 1.查询函数 2.F对象 3.Q对象 4.聚合函数 5.Count函数 6.查询集 查询集的特性 对查询集进行切片 判断一个查询集中是否有数据 7.模型类之间的关系 一对多关系 多对多关系 ...

  6. 章鱼哥出品—VB.NET DataGridView绑定数据源 quot;与货币管理器的位置关联的行不能设置为不可见quot; 问题的解决...

    DtaGridView绑定数据源后.假设想让数据条件显示的话,直接使用  My_Row.Visible = False就会出错.错误类型是 "与货币管理器的位置关联的行不能设置为不可见&qu ...

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

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

  8. Django中--自定义模型管理器类

    BookInfo.objects.all()->objects是一个什么东西呢? 答:objects是models.Manger类的一个对象,是Django帮我自动生成的管理器对象,通过这个管理 ...

  9. Django:admin管理后台2,ModelAdmin模型管理器类

    https://docs.djangoproject.com/zh-hans/3.2/ref/contrib/admin/ admin.py from django.contrib import ad ...

最新文章

  1. show processlist结果筛选(转)
  2. JAVA中string的赋值_Java中关于String赋值的两种形式
  3. cocos2d 走动椭圆
  4. 卸掉包袱,诺基亚将走得更远
  5. 手机900e模式如何救_手机护眼模式真的有用吗?长时间看手机如何保护视力?...
  6. 极棒开启AI挑战 全球寻找顶级语音合成“机械师”
  7. VB.NET/C# Free Grid Control 免费开源表格控件 - ReoGrid 介绍(1)
  8. 揭秘硅谷传奇:惠普的创业故事
  9. 一次电子罗盘+GPS智能转舵小车
  10. Android开发资料超级给力小游戏(精典美女搓搓 妄撮版)源码
  11. WebView下载点击无反应问题
  12. Nginx反向代理负载均衡群集实战
  13. 启蒙||那些人,那些剧||爱情+文学+英语
  14. PCL教程-点云配准之正态分布变换算法(NDT)
  15. 添加小度在家显示无法连接服务器,小度在家突然连不上网了
  16. java agent简介热部署SDK接入
  17. php3d饼状图的教学,php使用Jpgraph创建3D饼形图效果示例
  18. 在c#中using和new这两个关键字有什么意义
  19. 安装pytorch一直报错解决方法!!! ERROR: Exception: Traceback (most recent call last): File “D:\Anacoda\lib\s....
  20. Wind分布式游戏服务器引擎的实现

热门文章

  1. batch spring 重复执行_一个3年老javaer竟然连Spring的事务管理都不知道,惊呆了
  2. java el表达式 导航规则_诺禾:在jsp里面如何不写java代码展示数据(EL表达式的使用)...
  3. mysql 换行_教你如何用Python 连接 MySQL
  4. python脚本运行一段时间后就停止了_CMD运行python程序自动暂停问题解决
  5. Jupyter中那些神奇的第三方拓展魔术命令
  6. 10行Python代码自动清理电脑内重复文件,解放双手!
  7. prism项目搭建 wpf_Prism完成的一个WPF项目
  8. 静态路由与动态路由的优先级_静态路由基础知识
  9. 深度学习-Tensorflow2.2-深度学习基础和tf.keras{1}-tf.keras函数式API-08
  10. python打印文件中的前三行_linux利用grep查看打印匹配的下几行或前后几行的命令...