亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django 多對多字段的更新和插入數(shù)據(jù)實例

 更新時間:2020年03月31日 10:06:38   作者:lmw1239225096  
這篇文章主要介紹了Django 多對多字段的更新和插入數(shù)據(jù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

表的普通字段 一對多字段 多對多字段 插入數(shù)據(jù)

#插入數(shù)據(jù)
def add(request):
 
 G_title=request.POST.get('title')#-------值為:python書本
 
 G_publish=request.POST.get('publish') #-------值為:1
 G_authors_list=request.POST.getlist('authors')#-------值為:[3,7]
 
 
 
 publish_obj=Publish.objects.get(id=G_publish)#查找Publish表對應(yīng)id的obj 
 authors_obj_list=Author.objects.filter(id__in=G_authors_list)#查找Author表對應(yīng)id的多個obj
 
 title  #-------普通字段
 publish  #-------一對多外鍵
 authors  #-------多對多外鍵
 
 book_obj=Book.objects.create(title=G_title,publish=publish_obj)#添加普通和一對多外鍵的值
 
 
 #添加多對多外鍵的值
 方式一
 book_obj.authors.add(*authors_obj_list)
 方式二
 for obj in authors_obj_list:
  book_obj.authors.add(obj)
 
 return redirect('/index/')

表的普通字段 一對多字段 多對多字段 修改數(shù)據(jù)

def edit(request,b_id):#b_id-----為書本的id
 
 G_title=request.POST.get('title')#-------值為:linux書本
 
 G_publish = request.POST.get('publish')#-------值為:2
 G_authors_list = request.POST.getlist('authors')#-------值為:[3,5]
 
 
 book_obj = Book.objects.get(id=b_id)#查找Book表要修改的id對象
 
 publish_obj = Publish.objects.get(id=G_publish)#查找Publish表對應(yīng)id的obj
 author_objs = Author.objects.filter(id__in=G_authors_list)#查找Author表對應(yīng)id的多個obj
 
 
 book_obj.title=G_title   #-------修改普通字段
 book_obj.publish=publish_obj #-------修改一對多字段
 book_obj.authors=author_objs #-------修改多對多字段 
 #注意:多對多字段 必須是.all()/.filter()等的查詢集(QuerySet)
 book_obj.save()     #-------一定得save(),才能對數(shù)據(jù)庫進行修改
 
 return redirect('/index/')

補充知識:Django的ManyToManyField(多對多)的使用以及through的作用

創(chuàng)建一個經(jīng)典的多對多關(guān)系:一本書可以有多個作者,一個作者可以有多本書(如下)

進行數(shù)據(jù)遷移,然后我們使用python manage.py sqlmigrate app(應(yīng)用名) 遷移文件名 查看一下sql語句(如下):

從圖可以看出生成了三張表,一個是book(書籍)表包含id,title兩個字段,一個是author(作者表)包含id,name,email三個字段,這是我們剛剛在models.py文件中創(chuàng)建兩個模型,但是有一點需要注意的是在book表里面沒有我們創(chuàng)建的authors表,而是多了一個book_authors表,在這張表里面又多了兩個字段book_id,author_id,其實這個第三張表就是用來存放書籍和作者之間映射關(guān)系的中間表

那么我們?nèi)绾芜M行數(shù)據(jù)的查詢呢?

1.一本書的所有作者

b = Book.objects.get(id=1)
b.author.all()

2.一個作者的所有書籍:

a = Author.objects.get(id=1)
a.book_set.all()

3.給多對多的字段添加值(添加多對多關(guān)系):

從多對多字段中刪除值(刪除多對多關(guān)系):

可以看出這個blog_book_authors是根據(jù)多對多關(guān)系自動生成的關(guān)系表,但是如果我們想要搜集關(guān)于這個作者發(fā)布某一本書籍的時間額外增加一個字段,或者說與現(xiàn)有的系統(tǒng)集成,這個關(guān)系表已經(jīng)存在了,那對于這樣的情形,Django允許指定一個用于管理多對多關(guān)系的中間模型,然后就可以把這些額外的字段添加到這個中間模型中,具體的方法就是在ManyToMany字段中指定through參數(shù)指定作為中介的中間模型,修改上述models.py:

查看一下此時的數(shù)據(jù)庫表結(jié)構(gòu):

在創(chuàng)建BookAuthor類的最后使用了自定義的名稱,這個也可以不用指定,系統(tǒng)可以自動生成表名

仔細(xì)觀察BookAuthor這個類,也就是我們前面講到的中間模型,同時我們看到在創(chuàng)建中間模型的時候我們創(chuàng)建了兩個外鍵,這兩個外鍵定義了兩個模型之間是如何關(guān)聯(lián)到一起的

所以當(dāng)創(chuàng)建多對多關(guān)系模型的時候提倡使用through參數(shù)去指定并創(chuàng)建中間模型,這樣比較方便我們進行字段的擴展

那么此時我們又該如何添加和刪除多對多關(guān)系呢?還能使用和剛剛相同的方法嗎?

 # 添加作者 ringo
 ringo = Author.objects.create(name='Ringo',email='ringo@qq.com')
 # 添加作者paul
 paul = Author.objects.create(name='Paul',email='paul@qq.com')
 # 添加書籍 python book1
 book1 = Book.objects.create(title='python book1')
 # 給多對多添加值也就是添加多對多關(guān)系
 m1 = BookAuthor(author=ringo,book=book)
 # 第二種添加方式
 m2 = BookAuthor.objects,create(author=paul,book=book1)

當(dāng)我們使用多對多的中間模型之后,add(),remove(),create()這些方法都會被禁用,所以在創(chuàng)建這種類型的關(guān)系的時候唯一的方法就是通過創(chuàng)建中間模型的實例

以上這篇Django 多對多字段的更新和插入數(shù)據(jù)實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 4個的Python自動化腳本分享

    4個的Python自動化腳本分享

    這篇文章主要給大家分享了4個的Python自動化腳本,自動化腳本無需手動一次又一次地完成這些任務(wù),非常方便,下面我能就一起進入文章來來了解實現(xiàn)吧,希望對你有所幫助
    2021-12-12
  • python爬蟲之requests庫使用代理方式

    python爬蟲之requests庫使用代理方式

    這篇文章主要介紹了python爬蟲之requests庫使用代理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • selenium XPath定位的實現(xiàn)示例

    selenium XPath定位的實現(xiàn)示例

    XPath是一種在XML文檔中定位和選擇節(jié)點的語言,通過路徑表達式遍歷XML樹,支持節(jié)點選取、字符串匹配、數(shù)值計算、邏輯運算等功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 分享十個Python提高工作效率的自動化腳本

    分享十個Python提高工作效率的自動化腳本

    在這個自動化時代,我們有很多重復(fù)無聊的工作要做。 想想這些你不再需要一次又一次地做的無聊的事情,讓它自動化,讓你的生活更輕松。本文分享了10個Python自動化腳本,希望對大家有所幫助
    2022-10-10
  • python數(shù)據(jù)歸一化及三種方法詳解

    python數(shù)據(jù)歸一化及三種方法詳解

    這篇文章主要介紹了python數(shù)據(jù)歸一化及三種方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python數(shù)據(jù)類型詳解(三)元祖:tuple

    Python數(shù)據(jù)類型詳解(三)元祖:tuple

    本文給大家介紹的是Python數(shù)據(jù)類型中的元祖(tuple),簡單的說Tuple,與列表一樣,元素也是不可變的,但與列表不同,在一個元祖可以包含不同類型的元素
    2016-05-05
  • python繪制立方體的方法

    python繪制立方體的方法

    這篇文章主要為大家詳細(xì)介紹了python繪制立方體的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • python的input,print,eval函數(shù)概述

    python的input,print,eval函數(shù)概述

    這篇文章主要為大家概述了python的input,print,eval函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python中subprocess實例用法及知識點詳解

    python中subprocess實例用法及知識點詳解

    在本篇文章里小編給大家分享的是關(guān)于python中subprocess實例用法及知識點詳解內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-10-10
  • Python+Plotly繪制精美的數(shù)據(jù)分析圖

    Python+Plotly繪制精美的數(shù)據(jù)分析圖

    Plotly?是目前已知的Python最強繪圖庫,比Echarts還強大許多。它的繪制通過生成一個web頁面完成,并且支持調(diào)整圖像大小,動態(tài)調(diào)節(jié)參數(shù)。本文將利用Plotly繪制精美的數(shù)據(jù)分析圖,感興趣的可以了解一下
    2022-05-05

最新評論