博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django ORM中的RelatedManager(关联管理器)
阅读量:4309 次
发布时间:2019-06-06

本文共 3222 字,大约阅读时间需要 10 分钟。

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

多对多表中的用法:

在多对多的表中 正向查询 

#基于对象的查询#正查# author_obj = Author.objects.get(id=1)# print(author_obj)  #
# print(author_obj.book_set.all()) #出版过的所有的书
,
]>

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

#反向# book_obj = Book.objects.get(id=1)# print(book_obj)   #小王子#联合出版小王子这本书的所有作者# print(book_obj.author.all())#
>,
>]># 设置多对多关系# author_obj = Author.objects.get(id=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)   #                                      
# 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)# 
,
]># ret = pub_obj.books.all() # related_name='books' 反向查询时使用 不用再用表名小写_set了# print(ret) #
,
]># 基于字段的查询# 查沙河出版社出版的书# 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()) #
,
]># 从关联对象集中移除执行的模型对象 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

你可能感兴趣的文章
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>
通向财务自由之路02_成功的决定因素:你
查看>>
中低频量化交易策略研发01_引言
查看>>
中低频量化交易策略研发06_推进的择时策略
查看>>
史丹·温斯坦称傲牛熊市的秘密
查看>>
期货市场技术分析01_理论基础
查看>>
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>
期货市场技术分析05_交易量和持仓兴趣
查看>>
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>