django批量修改table_Django 数据库表多对多的创建和增删改查
前面已經(jīng)學(xué)習(xí)了在Django里面如何對(duì)單表的操作,同時(shí)也學(xué)習(xí)了1對(duì)多(單個(gè)外鍵)的表的操作。接下來,我們看看多對(duì)多(多個(gè)外鍵)的關(guān)系如何創(chuàng)建和管理。
比如說,我們有一個(gè)主機(jī)表,也有一個(gè)應(yīng)用程序表,一個(gè)主機(jī)可以對(duì)應(yīng)多個(gè)程序,一個(gè)程序也可以對(duì)應(yīng)多個(gè)主機(jī),這是一個(gè)典型的多對(duì)多的結(jié)構(gòu)。一般來說,我們會(huì)在數(shù)據(jù)庫里創(chuàng)建一個(gè)中間的表,分別和這兩個(gè)表進(jìn)行外鍵關(guān)聯(lián)。
例1. 手動(dòng)的定義一個(gè)HostToApp表,關(guān)聯(lián)到Host和Application表,這樣一來,如果我希望創(chuàng)建一個(gè)新的關(guān)聯(lián),我直接對(duì)這個(gè)中間的表進(jìn)行操作即可
例2. 除了手動(dòng)創(chuàng)建一個(gè)關(guān)系表,我們還可以讓系統(tǒng)自動(dòng)生成一個(gè)
執(zhí)行manage.py migrate和 manage.py migration 之后,查看數(shù)據(jù)庫,可以看見自動(dòng)生成了一個(gè)關(guān)系表app01_application_r, 里面有3個(gè)字段,一個(gè)id和兩個(gè)外鍵
這個(gè)自動(dòng)生成的表,在Django里面不能直接像單表一樣操作,因?yàn)橄到y(tǒng)并不知道他的‘存在’,因此只能通過間接的操作。
間接操作:
查詢
//這里首先獲取app_id=1的對(duì)象,后面的操作都是基于這個(gè)前提來的
obj=models.Application.objects.get(id=1)
obj.name
obj.r.all() //類似單表操作
增加
obj.r.add(1) ?//添加app_id=1, host_id=1的記錄
obj.r.add(2,3,4) //直接添加多個(gè)值
obj.r.add(*[1,2,3,4]) // 直接通過列表的格式添加多個(gè)值
刪除,格式和增加一樣
obj.r.remove(1)
obj.r.remove(2,3)
obj.r.remove(*[2,3,4])
obj.r.clear() //刪除所有app_id=1的關(guān)系
修改
obj.r.set([2,3,4]) //直接設(shè)置app_id=1, host_id=2,3,4,注意列表前面沒有星號(hào)
例3. 下面看個(gè)實(shí)例
models.py
urls.py ( 里面有 views.app和 views.ajax_add_app,對(duì)比ajax和普通使用)
views.py 注意獲取用戶輸入的新的App名稱和這個(gè)App所對(duì)應(yīng)的主機(jī)列表,分別在不同的表進(jìn)行創(chuàng)建新數(shù)據(jù)
app.html,主要界面是就是顯示當(dāng)前數(shù)據(jù)和一個(gè)模態(tài)對(duì)話框。點(diǎn)擊添加,彈出對(duì)話框,然后輸入App和對(duì)應(yīng)的主機(jī)名;后臺(tái)獲取之后添加返回頁面
結(jié)果如下所示:
在我們使用模態(tài)對(duì)話框的時(shí)候,使用AJAX的好處是可以實(shí)現(xiàn)一些驗(yàn)證的功能;如果我們不在同一個(gè)Url里面使用模態(tài)對(duì)話框,而是新開一個(gè)URL來創(chuàng)建數(shù)據(jù),可以直接用普通的form提交就行了。模態(tài)對(duì)話框適合小數(shù)據(jù)的提交,而新的Url更適合大量數(shù)據(jù)的提交(比如新開一個(gè)頁面寫博客)
總結(jié)
以上是生活随笔為你收集整理的django批量修改table_Django 数据库表多对多的创建和增删改查的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: win10卸载电脑管家就蓝屏_win10
- 下一篇: 计算方位角_全站仪各方面应用的原理、操作
