电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:8日期: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=’ringo@qq.com’) # 添加作者paul paul = Author.objects.create(name=’Paul’,email=’paul@qq.com’) # 添加書籍 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
相關文章:
主站蜘蛛池模板: 石牌坊价格石牌坊雕刻制作_石雕牌坊牌楼石栏杆厂家_山东嘉祥石雕有限公司 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | 天然气分析仪-液化气二甲醚分析仪|传昊仪器| 小型高低温循环试验箱-可程式高低温湿热交变试验箱-东莞市拓德环境测试设备有限公司 | 旗杆生产厂家_不锈钢锥形旗杆价格_铝合金电动旗杆-上海锥升金属科技有限公司 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 365文案网_全网创意文案句子素材站 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 布袋除尘器-单机除尘器-脉冲除尘器-泊头市兴天环保设备有限公司 布袋除尘器|除尘器设备|除尘布袋|除尘设备_诺和环保设备 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 硬度计_影像测量仪_维氏硬度计_佛山市精测计量仪器设备有限公司厂家 | 沟盖板_复合沟盖板厂_电力盖板_树脂雨水篦子-淄博拜斯特 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 模切之家-专注服务模切行业的B2B平台!| 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 方源木业官网-四川木门-全国木门专业品牌 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 光环国际-新三板公司_股票代码:838504 | 武汉印刷厂-不干胶标签印刷厂-武汉不干胶印刷-武汉标签印刷厂-武汉标签制作 - 善进特种标签印刷厂 | 包装设计公司,产品包装设计|包装制作,包装盒定制厂家-汇包装【官方网站】 | 大鼠骨髓内皮祖细胞-小鼠神经元-无锡欣润生物科技有限公司 | 超声骨密度仪,双能X射线骨密度仪【起草单位】,骨密度检测仪厂家 - 品源医疗(江苏)有限公司 | 【同风运车官网】一站式汽车托运服务平台,验车满意再付款 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 水冷散热器_水冷电子散热器_大功率散热器_水冷板散热器厂家-河源市恒光辉散热器有限公司 | 电主轴-高速精密电主轴-高速电机厂家-瑞德沃斯品牌有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 变压器配件,变压器吸湿器,武强县吉口变压器配件有限公司 |