Django外鍵(ForeignKey)操作以及related_name的作用詳解
之前已經(jīng)寫(xiě)過(guò)一篇關(guān)于Django外鍵的文章,但是當(dāng)時(shí)并沒(méi)有介紹如何根據(jù)外鍵對(duì)數(shù)據(jù)的操作,也就是如何通過(guò)主表查詢子表或者通過(guò)子表查詢主表的信息
首先我定義了兩個(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)來(lái),并獲取老師的相關(guān)信息

返回一個(gè)teacher對(duì)象,接下來(lái)就是查詢teacher相關(guān)聯(lián)的學(xué)生對(duì)象,在這里有一個(gè)需要注意的點(diǎn),django默認(rèn)情況下每一個(gè)主表的對(duì)象都有一個(gè)是外鍵的屬性,可以通過(guò)它查詢到所有關(guān)于子表的信息,這個(gè)屬性的名字就是子表的名稱小寫(xiě)加上_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è)方法是相同的,所以如果覺(jué)得比較麻煩的話,可以在定義主表的外鍵的時(shí)候,直接就給外鍵定義好名稱使用related_name
上面的查詢主要是通過(guò)主表查詢子表的信息
下面說(shuō)一下如何通過(guò)子表查詢主表的相關(guān)信息,也就是查詢一個(gè)學(xué)生所對(duì)應(yīng)的老師的信息
首先需要先獲取一個(gè)子表的對(duì)象,那么就可以通過(guò)定義外鍵時(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)文章
Tensorflow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸
這篇文章主要為大家詳細(xì)介紹了Tensorflow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)擬合線性回歸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
selenium設(shè)置瀏覽器為headless無(wú)頭模式(Chrome和Firefox)
這篇文章主要介紹了selenium設(shè)置瀏覽器為headless無(wú)頭模式(Chrome和Firefox),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python轉(zhuǎn)為C語(yǔ)言并編譯生成二進(jìn)制文件的教程詳解
這篇文章主要為大家詳細(xì)介紹了將Python轉(zhuǎn)為C語(yǔ)言并編譯生成二進(jìn)制文件的相關(guān)教程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-12-12
python中sys.argv函數(shù)精簡(jiǎn)概括
本篇文章給大家分享了關(guān)于python中sys.argv函數(shù)的相關(guān)知識(shí)點(diǎn),有興趣的朋友可以參考學(xué)習(xí)下。2018-07-07
Python使用pymupdf實(shí)現(xiàn)PDF內(nèi)容搜索并顯示功能
在日常工作和學(xué)習(xí)中,我們可能需要查找和提取PDF文件中的特定內(nèi)容,本文將介紹如何使用pymupdf實(shí)現(xiàn)PDF內(nèi)容搜索并顯示的功能,需要的可以參考下2023-08-08
淺談pandas中DataFrame關(guān)于顯示值省略的解決方法
下面小編就為大家分享一篇淺談pandas中DataFrame關(guān)于顯示值省略的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

