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