1. 程式人生 > >Django外來鍵(ForeignKey)操作以及related_name的作用

Django外來鍵(ForeignKey)操作以及related_name的作用

  之前已經寫過一篇關於Django外來鍵的文章,但是當時並沒有介紹如何根據外來鍵對資料的操作,也就是如何通過主表查詢子表或者通過子表查詢主表的資訊

   首先我定義了兩個模型,一個是老師模型,一個是學生模型,一個老師對應多個學生,這個算是一個一對多的型別(如下圖所示)

     

      那麼如果我們要想查詢一個老師對應的學生有哪些,該如何操作呢?

     首先我們先查詢到老師的資訊,在這裡我們使用python shell 進行演示  ,輸入命令python manage.py shell 進入python shell操作介面:

     第一步需要做的自然還是需要將我們的模型匯入進來,並獲取老師的相關資訊

    

       返回一個teacher物件,接下來就是查詢teacher相關聯的學生物件,在這裡有一個需要注意的點,django預設情況下每一個主表的物件都有一個是外來鍵的屬性,可以通過它查詢到所有關於子表的資訊,這個屬性的名字就是子表的名稱小寫加上_set,具體到這個就是student_set,預設返回的是QuerySet,操作如下:

     

      在這裡也會牽涉到另外一個知識點related_name的使用,在models.py使用Foreign定義外來鍵的時候也可以傳入一個引數related_name,操作如下:

 執行python manage.py makemigrations 和  python manage.py migrate 

   

     從上圖可以看到和之前的_set操作的效果是一樣的,這兩個方法是相同的,所以如果覺得比較麻煩的話,可以在定義主表的外來鍵的時候,直接就給外來鍵定義好名稱使用related_name

    上面的查詢主要是通過主表查詢子表的資訊

    下面說一下如何通過子表查詢主表的相關資訊,也就是查詢一個學生所對應的老師的資訊

     首先需要先獲取一個子表的物件,那麼就可以通過定義外來鍵時候的那個外來鍵的欄位名獲取關於主表的資訊了

     比如我得到了一個student物件,然後我想要得到這個student物件對應的主表teache中的資訊的話,就使用  student.teacher 獲取,其中這個teacher就是在子表中定義的外來鍵欄位,如下: