日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的django ORM中的RelatedManager(关联管理器)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。