Django外鍵(ForeignKey)操作以及related_name的作用詳解
之前已經(jīng)寫過一篇關(guān)于Django外鍵的文章,但是當(dāng)時(shí)并沒有介紹如何根據(jù)外鍵對(duì)數(shù)據(jù)的操作,也就是如何通過主表查詢子表或者通過子表查詢主表的信息
首先我定義了兩個(gè)模型,一個(gè)是老師模型,一個(gè)是學(xué)生模型,一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生,這個(gè)算是一個(gè)一對(duì)多的類型(如下圖所示)
那么如果我們要想查詢一個(gè)老師對(duì)應(yīng)的學(xué)生有哪些,該如何操作呢?
首先我們先查詢到老師的信息,在這里我們使用python shell 進(jìn)行演示 ,輸入命令python manage.py shell 進(jìn)入python shell操作界面:
第一步需要做的自然還是需要將我們的模型導(dǎo)入進(jìn)來,并獲取老師的相關(guān)信息
返回一個(gè)teacher對(duì)象,接下來就是查詢teacher相關(guān)聯(lián)的學(xué)生對(duì)象,在這里有一個(gè)需要注意的點(diǎn),django默認(rèn)情況下每一個(gè)主表的對(duì)象都有一個(gè)是外鍵的屬性,可以通過它查詢到所有關(guān)于子表的信息,這個(gè)屬性的名字就是子表的名稱小寫加上_set,具體到這個(gè)就是student_set,默認(rèn)返回的是QuerySet,操作如下:
在這里也會(huì)牽涉到另外一個(gè)知識(shí)點(diǎn)related_name的使用,在models.py使用Foreign定義外鍵的時(shí)候也可以傳入一個(gè)參數(shù)related_name,操作如下:
執(zhí)行python manage.py makemigrations 和 python manage.py migrate
從上圖可以看到和之前的_set操作的效果是一樣的,這兩個(gè)方法是相同的,所以如果覺得比較麻煩的話,可以在定義主表的外鍵的時(shí)候,直接就給外鍵定義好名稱使用related_name
上面的查詢主要是通過主表查詢子表的信息
下面說一下如何通過子表查詢主表的相關(guān)信息,也就是查詢一個(gè)學(xué)生所對(duì)應(yīng)的老師的信息
首先需要先獲取一個(gè)子表的對(duì)象,那么就可以通過定義外鍵時(shí)候的那個(gè)外鍵的字段名獲取關(guān)于主表的信息了
比如我得到了一個(gè)student對(duì)象,然后我想要得到這個(gè)student對(duì)象對(duì)應(yīng)的主表teache中的信息的話,就使用 student.teacher 獲取,其中這個(gè)teacher就是在子表中定義的外鍵字段,如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python并發(fā)編程隊(duì)列與多線程最快發(fā)送http請(qǐng)求方式
假如有一個(gè)文件,里面有10萬個(gè)url,需要對(duì)每個(gè)url發(fā)送http請(qǐng)求,并打印請(qǐng)求結(jié)果的狀態(tài)碼,如何編寫代碼盡可能快的完成這些任務(wù)呢2021-09-09pandas DataFrame實(shí)現(xiàn)幾列數(shù)據(jù)合并成為新的一列方法
今天小編就為大家分享一篇pandas DataFrame實(shí)現(xiàn)幾列數(shù)據(jù)合并成為新的一列方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python通過正則表達(dá)式選取callback的方法
這篇文章主要介紹了Python通過正則表達(dá)式選取callback的方法,涉及Python正則表達(dá)式及回調(diào)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07使用flask如何獲取post請(qǐng)求參數(shù)
近日在使用flask框架獲取前端的請(qǐng)求時(shí)獲取參數(shù)時(shí),遇到了幾個(gè)問題,所以下面這篇文章主要給大家介紹了關(guān)于使用flask如何獲取post請(qǐng)求參數(shù)的相關(guān)資料,需要的朋友可以參考下2022-08-08推薦一款高效的python數(shù)據(jù)框處理工具Sidetable
這篇文章主要為大家介紹推薦一款高效的python數(shù)據(jù)框處理工具Sidetable,文章詳細(xì)的講解了Sidetable的安裝及用法,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11淺談Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑
這篇文章主要介紹了Keras中fit()和fit_generator()的區(qū)別及其參數(shù)的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作
這篇文章主要介紹了使用Keras實(shí)現(xiàn)簡(jiǎn)單線性回歸模型操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06python實(shí)戰(zhàn)之百度智能云使人像動(dòng)漫化
這篇文章主要介紹了python實(shí)戰(zhàn)之百度智能云使人像動(dòng)漫化,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-04-04