亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:6日期:2024-10-15 10:19:38

表的普通字段 一對(duì)多字段 多對(duì)多字段 插入數(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表對(duì)應(yīng)id的obj authors_obj_list=Author.objects.filter(id__in=G_authors_list)#查找Author表對(duì)應(yīng)id的多個(gè)obj title #-------普通字段 publish #-------一對(duì)多外鍵 authors #-------多對(duì)多外鍵 book_obj=Book.objects.create(title=G_title,publish=publish_obj)#添加普通和一對(duì)多外鍵的值 #添加多對(duì)多外鍵的值 方式一 book_obj.authors.add(*authors_obj_list) 方式二 for obj in authors_obj_list: book_obj.authors.add(obj) return redirect(’/index/’)

表的普通字段 一對(duì)多字段 多對(duì)多字段 修改數(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對(duì)象 publish_obj = Publish.objects.get(id=G_publish)#查找Publish表對(duì)應(yīng)id的obj author_objs = Author.objects.filter(id__in=G_authors_list)#查找Author表對(duì)應(yīng)id的多個(gè)obj book_obj.title=G_title #-------修改普通字段 book_obj.publish=publish_obj #-------修改一對(duì)多字段 book_obj.authors=author_objs #-------修改多對(duì)多字段 #注意:多對(duì)多字段 必須是.all()/.filter()等的查詢集(QuerySet) book_obj.save() #-------一定得save(),才能對(duì)數(shù)據(jù)庫進(jìn)行修改 return redirect(’/index/’)

補(bǔ)充知識(shí):Django的ManyToManyField(多對(duì)多)的使用以及through的作用

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

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

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

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

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

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

1.一本書的所有作者

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

2.一個(gè)作者的所有書籍:

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

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

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

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

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

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

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

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

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

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

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

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

那么此時(shí)我們又該如何添加和刪除多對(duì)多關(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’) # 給多對(duì)多添加值也就是添加多對(duì)多關(guān)系 m1 = BookAuthor(author=ringo,book=book) # 第二種添加方式 m2 = BookAuthor.objects,create(author=paul,book=book1)

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

以上這篇Django 多對(duì)多字段的更新和插入數(shù)據(jù)實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 中国黄色一级大片 | 国内精品视频一区 | 一级视频免费观看 | 亚洲国产精品欧美综合 | 国产a一级毛片午夜剧院 | 日一区二区 | 久热精品视频在线观看99小说 | 日韩欧美在线视频观看 | 午夜视频在线观看视频 | 91福利一区二区三区 | 久久精品国产亚洲麻豆小说 | 高h辣肉各种姿势爽文bl | 看真人视频a级毛片 | 麻豆免费在线视频 | 正在播放国产巨作 | 特黄aaaaaa久久片 | 亚洲日本在线免费观看 | 久久99这里只有精品国产 | 丁香啪啪天堂激情婷婷 | 天天影视色香欲综合网天天录日日录 | 欧美日韩中| 亚洲国产精品一区二区首页 | 国产精品久久婷婷六月丁香 | 九九热在线视频免费观看 | 肉体秘书hd中文字幕 | 久久精品图片 | fc2成年免费共享视频网站 | 成人视屏网站 | 免费人成综合在线视频 | 国产欧美二区 | 33333在线亚洲 | 亚洲欧美人成人让影院 | 色花五月色婷婷 | 亚洲欧洲无码一区二区三区 | 亚洲国产精品综合久久网络 | 亚洲欧美日韩一区二区在线观看 | 一本久道在线 | yiren22开心综合成人网 | 欧美一级高清片免费一级 | 午夜激情福利在线 | 国产免费啪啪 |