最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

零基礎(chǔ)入手Django(八):模型基礎(chǔ)3

2023-05-07 13:26 作者:IT小叮當(dāng)  | 我要投稿

今天,小叮當(dāng)來繼續(xù)為大家分享Django的干貨~

圖片

主要內(nèi)容有:表的級(jí)聯(lián)刪除、表關(guān)聯(lián)對(duì)象的訪問、表關(guān)聯(lián)對(duì)象的補(bǔ)充、關(guān)系表的數(shù)據(jù)操作和多表查詢。

首先,我們接著昨天所建的項(xiàng)目db_test,為其配置路由

(1)為db_test新建urls.py文件

圖片

(2)在主路由中為db_test分配子路由

圖片

(3)設(shè)置db_test的views.py定義視圖函數(shù)

(4)在db_test的urls.py中配置對(duì)應(yīng)的路由

(5)在瀏覽器中訪問

圖片

(6)通過xshell進(jìn)行查看

圖片
圖片

可以看到,學(xué)院表和學(xué)生表已成功創(chuàng)建。

一、表的級(jí)聯(lián)刪除

(1)在主表中刪除數(shù)據(jù),對(duì)應(yīng)表中的數(shù)據(jù)也會(huì)被刪除。

例如,將學(xué)院表中的計(jì)算機(jī)學(xué)院刪除,對(duì)應(yīng)學(xué)生表中屬于計(jì)算機(jī)學(xué)院的小叮當(dāng)則也會(huì)被刪除。

重新定義db_test中views.py里的視圖函數(shù)test

在瀏覽器中訪問,使視圖函數(shù)運(yùn)行

圖片

通過xshell查看數(shù)據(jù)庫(kù)

圖片

可見計(jì)算機(jī)學(xué)院從學(xué)院表中刪除后,與之關(guān)聯(lián)的學(xué)生表中的小叮當(dāng)也被刪除了。

(2)設(shè)置默認(rèn)值為空的級(jí)聯(lián)刪除

當(dāng)我們進(jìn)行級(jí)聯(lián)刪除時(shí),只想刪除主表中的數(shù)據(jù)以及其他表對(duì)它的引用,而不刪除其他表中的數(shù)據(jù)時(shí),該怎么做呢?

例如,我想刪除學(xué)院表中id=2的音樂學(xué)院和學(xué)生表中對(duì)音樂學(xué)院的引用,而不刪除學(xué)生表中的少年叮當(dāng)

首先,我們可以在xshell中進(jìn)入mysql

執(zhí)行 show create table db_test_student\G?查看創(chuàng)建db_test_student表的mysql語(yǔ)句?"\G"表示結(jié)果按列輸出

圖片

可以看到,department_id不允許為空

我們?cè)趍odels.py中更改表結(jié)構(gòu),將學(xué)生信息表中的on_delete其設(shè)置為默認(rèn)值為空的級(jí)聯(lián)刪除

圖片

具體代碼如下:

(當(dāng)然,如果不想執(zhí)行級(jí)聯(lián)刪除,可以on_delete=models.PROTECT 將其保護(hù)起來)

更改表結(jié)構(gòu)后,執(zhí)行映射等操作。

在Tools中找到Run manage.py Task...

圖片

執(zhí)行makemigrations

圖片

執(zhí)行migrate

圖片

之后在xhell的mysql中再次查看表結(jié)構(gòu),發(fā)現(xiàn)department_id字段已默認(rèn)為空

圖片

重新定義db_test中views.py里的視圖函數(shù)test

在瀏覽器中訪問

圖片

通過xshell查看數(shù)據(jù)庫(kù)

圖片

二、表關(guān)聯(lián)對(duì)象的訪問

1.一對(duì)多關(guān)聯(lián)?學(xué)院表和學(xué)生表

(1)在models.py中重新定義模型類,為學(xué)院表和學(xué)生表加上自定義輸出def __str__(self)

(2)重新定義視圖函數(shù)

(3)在瀏覽器中訪問

圖片

(4)在后臺(tái)查看輸出

圖片

小結(jié):在學(xué)生表查詢到的學(xué)生信息相當(dāng)于學(xué)生類的實(shí)例對(duì)象,可以直接像訪問成員函數(shù)那樣訪問學(xué)院類中的屬性,以此來實(shí)現(xiàn)表關(guān)聯(lián)對(duì)象的訪問。

值得注意,學(xué)生表關(guān)聯(lián)了學(xué)院表,想查詢學(xué)院有哪些學(xué)生時(shí)就屬于反向查詢了。

反向查詢

(1)直接反向查詢

直接反向查詢,是通過查詢關(guān)鍵字加”_set"來實(shí)現(xiàn)的,例如“student_set",如果表關(guān)系是一對(duì)一,則不加_set也可。

(2)重命名查詢?related_name

通過在模型類中添加related_name的方法,也可進(jìn)行反向查詢

圖片

具體代碼如下

此時(shí)進(jìn)行反向查詢時(shí),使用students即可。因?yàn)橄到y(tǒng)中已經(jīng)沒有了student_set屬性,若還按student_set查詢則會(huì)報(bào)錯(cuò)

圖片

在視圖函數(shù)中改為用students查詢,即可成功查詢

圖片

2.一對(duì)一關(guān)聯(lián)?學(xué)生表和學(xué)生詳細(xì)表

(1)查看學(xué)生信息詳細(xì)表?和學(xué)生表?

圖片
圖片

(2)models.py中在學(xué)生詳細(xì)模型類中自定義輸出?def__str__(self)

(3)views.py中根據(jù)表字段創(chuàng)建數(shù)據(jù)表

由于學(xué)生詳細(xì)信息表關(guān)聯(lián)的是學(xué)生表,所以在創(chuàng)建學(xué)生詳細(xì)表時(shí),id要從學(xué)生表里現(xiàn)在有的”2、3、4、5“中創(chuàng)建。

在瀏覽器中訪問觸發(fā)視圖函數(shù)

圖片

在數(shù)據(jù)庫(kù)中查看

圖片

(4)重新定義視圖函數(shù)

(5)在瀏覽器中訪問

圖片

(6)在后臺(tái)查看

圖片

3.多對(duì)多關(guān)聯(lián)?學(xué)生表和課程表

(1)查詢課程表字段

圖片

根據(jù)字段在views.py中為課程表添加數(shù)據(jù)

在瀏覽器中訪問

圖片

在數(shù)據(jù)庫(kù)中查看

圖片

在models.py中為課程表自定義輸出?def __str__(self)

由于訪問方法和之前的一樣,這里不再演示,在views.py中定義代碼如下

三、表關(guān)聯(lián)對(duì)象的補(bǔ)充

在表關(guān)聯(lián)中的正向查詢是指,一個(gè)表的模型類可以在另個(gè)一表的模型類中找到。

例如,在課程表的模型類中可以直接訪問到學(xué)生表模型類

圖片

那么,查詢一門課程所選的學(xué)生就是正向查詢。反之查詢學(xué)生選了哪些課就是反向查詢。

圖片

四、關(guān)系表的數(shù)據(jù)操作

1.數(shù)據(jù)的添加

(1)一對(duì)多關(guān)系 add()添加已經(jīng)存在的數(shù)據(jù)? ?create()添加新的數(shù)據(jù)

在views.py中重新定義視圖函數(shù)

在瀏覽器中訪問觸發(fā)視圖函數(shù)

圖片

在數(shù)據(jù)庫(kù)中查看

圖片

(2)多對(duì)多關(guān)系??add()添加已經(jīng)存在的數(shù)據(jù)? ?create()添加新的數(shù)據(jù)

在views.py中重新定義視圖函數(shù)

在瀏覽器中訪問?觸發(fā)視圖函數(shù)

圖片

在數(shù)據(jù)庫(kù)中查找課程表、課程-學(xué)生中間信息表

圖片

2.數(shù)據(jù)刪除?remove()?和clear()

(1)remove()

一對(duì)多關(guān)系的表使用remove刪除時(shí),必須保證外鍵列允許為空

例如,學(xué)院表和學(xué)生的對(duì)應(yīng)關(guān)系

圖片

多對(duì)多關(guān)系,使用remove刪除,刪除掉的是中間信息表

在視圖函數(shù)中定義

在瀏覽器中訪問

圖片

在數(shù)據(jù)庫(kù)中查詢

圖片

(2)clear()進(jìn)行清空

使用print查看3號(hào)學(xué)生選了哪些課程

定義視圖函數(shù)

瀏覽器中訪問

圖片

后臺(tái)中查看

圖片

定義視圖函數(shù)使用clear

瀏覽器中訪問

圖片

后臺(tái)查詢

圖片

數(shù)據(jù)庫(kù)中查詢中間課程-學(xué)生信息表

圖片

可見,clear()會(huì)將符合條件的數(shù)據(jù)全部清空0

五、多表查詢

多表查詢又被稱為是跨關(guān)聯(lián)關(guān)系的查詢。

Django 提供一種強(qiáng)大而又直觀的方式來“處理”查詢中的關(guān)聯(lián)關(guān)系,它在后臺(tái)自動(dòng)幫你處理JOIN。 若要跨越關(guān)聯(lián)關(guān)系,只需使用關(guān)聯(lián)的模型字段的名稱,并使用雙下劃線分隔,直至你想要的字段。

1.重建學(xué)生選課數(shù)據(jù)

在views.py中重新定義視圖函數(shù)

在瀏覽器中訪問?觸發(fā)視圖函數(shù)

圖片

在數(shù)據(jù)庫(kù)中查看

圖片

2.進(jìn)行多表查詢

在views.py中重新定義視圖函數(shù)

在瀏覽器中查看

圖片

在后臺(tái)查看

圖片

對(duì)照數(shù)據(jù)庫(kù)進(jìn)行檢驗(yàn)

圖片
圖片

經(jīng)檢查查詢結(jié)果正確,可見Django的多表查詢結(jié)果是十分便捷的了。



零基礎(chǔ)入手Django(八):模型基礎(chǔ)3的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
饶平县| 贡觉县| 原平市| 即墨市| 沛县| 上蔡县| 军事| 沿河| 和龙市| 青海省| 磴口县| 黎川县| 绵阳市| 仲巴县| 洪洞县| 吴江市| 图们市| 静海县| 大连市| 永修县| 红安县| 成都市| 凯里市| 富民县| 泾阳县| 南郑县| 石阡县| 广宁县| 黄浦区| 五原县| 钟山县| 安陆市| 五莲县| 岳西县| 扎兰屯市| 溧水县| 长岭县| 汉沽区| 罗甸县| 五河县| 兰坪|