多對多外來鍵增刪改

2022-10-09 11:45:09 字數 2007 閱讀 4970

# 如何給書籍新增作者?

book_obj = models.book.objects.filter(pk=1).first()

# print(book_obj.authors) # 就類似於你已經到了第三張關係表了

# book_obj.authors.add(1) # 書籍id為1的書籍繫結乙個主鍵為1 的作者

# book_obj.authors.add(2,3)

# author_obj = models.author.objects.filter(pk=1).first()

# author_obj1 = models.author.objects.filter(pk=2).first()

# author_obj2 = models.author.objects.filter(pk=3).first()

# book_obj.authors.add(author_obj)

# book_obj.authors.add(author_obj1,author_obj2)

"""add給第三張關係表新增資料

括號內既可以傳數字也可以傳物件 並且都支援多個

"""# 刪

# book_obj.authors.remove(2)

# book_obj.authors.remove(1,3)

# author_obj = models.author.objects.filter(pk=2).first()

# author_obj1 = models.author.objects.filter(pk=3).first()

# book_obj.authors.remove(author_obj,author_obj1)

"""remove

括號內既可以傳數字也可以傳物件 並且都支援多個

"""# 修改

# book_obj.authors.set([1,2]) # 括號內必須給乙個可迭代物件

# book_obj.authors.set([3]) # 括號內必須給乙個可迭代物件

# author_obj = models.author.objects.filter(pk=2).first()

# author_obj1 = models.author.objects.filter(pk=3).first()

# book_obj.authors.set([author_obj,author_obj1]) # 括號內必須給乙個可迭代物件

"""set

括號內必須傳乙個可迭代物件,該物件內既可以數字也可以物件 並且都支援多個

"""# 清空

# 在第三張關係表中清空某個書籍與作者的繫結關係

book_obj.authors.clear()

"""clear

括號內不要加任何引數

"""

有幾個注意的:

在多對多增加的時候,使用的book物件.author(多對多的表)就是進入了第三張表,並且第三張表的bookid就是當前book物件的id,是自動填的,而主動去新增的就是要用book.author.add(2)新增作者的id

第三張表的字段是各自的主鍵id,book的id 和 author的id  

在修改的時候需要傳乙個可迭代物件,傳過去的值 要是沒有 就會刪除,然後新建,比如第三張表中有1 1,1 3  兩條資料,傳的是[1,2] 查詢1有不刪,查詢到2沒有,刪除其他然後建立1 2,(注意整個左邊的1一直是book的id,自動傳的)

所以整個修改就很不好, 比如這裡面的1書的作者有5個人,分別是 1 1,1 2 ,1 2 ,1 3 ,1 5 然後我傳了6 ,這樣就把1-5的作者全刪了,然後只增了一條1 6 ,這tm還是修改??? 我要修改誰 就不傳誰?? 不修改的就將id都傳過去??這是什麼鬼

這個set搞不好,還是先設定is_bool把,把1 3設定false吧  代表1這本書的作者 不是3了, 如果要重新設定1這本書的作者,直接重新新增吧,但是這個就需要半自動建表了,也是麻煩

注意修改刪除的都是查詢的那條book的資料,其他的book不受影響

外來鍵,一對多,標量

摘自 flask web開發實戰 李輝 todo 記錄一下,待梳理理解 乙個作者可以有多本書 class author db.model id db.column db.integer,primary key true name db.column db.string 70 unique true ...

JPA單項一對多外來鍵關聯

一對多即乙個物件中包含又另外乙個物件的集合。user主表 table name user entity public class user public void setlistorder listlistorder id tablegenerator name pk primary table o...

雙向多對多

雙向多對多會通過乙個中間表來維持關聯關係 雙向多對多關係中必須指定乙個關係維護端 否則中間表裡會出現主鍵重複的問題 例如 標籤類tags和商品類goods 乙個標籤可對應多種商品 乙個商品也能有多個標籤 首先在兩個類中各建乙個對方型別的set作屬性 用到的註解解釋 商品類goods 需要用 join...