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

您的位置:首頁技術文章
文章詳情頁

Django 多對多字段的更新和插入數據實例

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

表的普通字段 一對多字段 多對多字段 插入數據

#插入數據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表對應id的obj authors_obj_list=Author.objects.filter(id__in=G_authors_list)#查找Author表對應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/’)

表的普通字段 一對多字段 多對多字段 修改數據

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

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

創建一個經典的多對多關系:一本書可以有多個作者,一個作者可以有多本書(如下)

Django 多對多字段的更新和插入數據實例

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

Django 多對多字段的更新和插入數據實例

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

那么我們如何進行數據的查詢呢?

1.一本書的所有作者

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

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

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

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

Django 多對多字段的更新和插入數據實例

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

Django 多對多字段的更新和插入數據實例

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

Django 多對多字段的更新和插入數據實例

查看一下此時的數據庫表結構:

Django 多對多字段的更新和插入數據實例

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

仔細觀察BookAuthor這個類,也就是我們前面講到的中間模型,同時我們看到在創建中間模型的時候我們創建了兩個外鍵,這兩個外鍵定義了兩個模型之間是如何關聯到一起的

所以當創建多對多關系模型的時候提倡使用through參數去指定并創建中間模型,這樣比較方便我們進行字段的擴展

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

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

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

以上這篇Django 多對多字段的更新和插入數據實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Django
相關文章:
主站蜘蛛池模板: 久久久亚洲精品国产 | 日韩在线aⅴ免费视频 | 欧美精品一区二区在线观看 | 国产高清自拍视频 | 免费精品视频在线 | 一级生活黄色片 | 久久线看观看精品香蕉国产 | 色天天综合色天天害人害己 | 高清一级做a爱过程免费视频 | 欧美一区二区在线观看 | 999热在线精品观看全部 | 韩国一级黄色毛片 | 日韩欧美一区二区三区中文精品 | 日韩中文字幕精品一区在线 | 国产99在线 | 亚洲 | 国产视频一区二区三区四区 | 黄色国产免费观看 | 久久久国产精品va麻豆 | 久久综合精品视频 | 亚洲美女精品视频 | 成人国产第一区在线观看 | 国产精品久久久久国产精品三级 | 日韩精品亚洲人成在线播放 | 黄色网址在线免费观看 | 中文字幕美日韩在线高清 | 久操不卡 | 亚洲色图亚洲色图 | 久久婷婷综合五月一区二区 | 色综合色综合色综合色综合 | 内地精品露脸自拍视频香蕉 | 欧美三级在线播放 | 日本在线观看免费看片 | 国产在线观看网址你懂得 | 粉嫩极品国产 | 91精品国产91久久久久 | 日本免费一区二区视频 | 国内精品一区二区三区 | 国产精品国产精品国产三级普 | 精品一区二区三区四区乱码90 | 美国a级作爱片免费观看美国 | 欧美激情首页 |