1. 程式人生 > 程式設計 >django中related_name的用法說明

django中related_name的用法說明

我們從一個簡單的事說起:

吃貨君到水果攤撿漏買了兩種水果,分別是人蔘果和蟠桃;後來水果攤主冥冥中感覺自己遺失了重寶,似乎和一個100歲的老爺爺有關,翻看自己的收款賬單,當看到吃貨君的賬單時心頭一緊,就是他買走了我的寶貝,我就要看看他買了我的什麼寶貝! 店主通過吃貨君的名字找到了他買的水果,發現竟然有萬年蟠桃以及億年人蔘過後,嚎啕大哭起來!!!

吃飯君是走了什麼運呢???

下面我們根據上面的小情節定義兩個模型,分別是買主模型以及水果模型,一個買主對應多個水果模型,簡單的一對多模型:

class Buyer(models.Model):
  name = models.CharField(verbose_name='買主名',max_length=10) 
  Alipay_id = models.CharField(verbose_name='支付寶賬號') 
  age = models.IntegerField(verbose_name='買主年齡',blank = True)
 
class Fruit(models.Model): 
  buyer = models.ForeignKey(Buyer,related_name='buyer_fruit') 
  fruit_name = models.CharField(verbose_name='水果名',max_length=10) 
  weight = models.FloatField(verbose_name='水果重量') 

通常,我們要查詢買主買了哪些水果,首先要根據條件找到買主資訊,然後根據買主資訊找到買主所購買的水果,本例中如下:

#首先獲得水果模型中外來鍵指向的表中物件:
buyer = Buyer.objects.filter(age = 100).first()
 
#然後通過‘_set'方法獲得子表中的資料:
fruits = buyer.fruit_set.all() 
"""
django 預設每個主表的物件都有一個是外來鍵的屬性,可以通過它來查詢到所有屬於主表的子表的資訊。 這個屬性的名稱預設是以子表的名稱小寫加上_set()來表示,這裡我們的主表是buyer,字表是fruit,所以主表外來鍵的屬性就是fruit_set
"""

上面的fruit_set是django為物件buyer預設建立的外來鍵的屬性,個人建議採用自定義的方式定義主表的外來鍵,這樣使用時更熟悉一些吧!

而related_name就實現這個功能,在字表中定義外來鍵時,增加related_name欄位指定這個字表在主表中對應的外來鍵屬性,

如下:

class Fruit(models.Model): 
  buyer = models.ForeignKey(Buyer,related_name='buyer_fruit') 
"""
主表:buyer
子表:fruit
子表在主表中對應的外來鍵屬性:related_name='buyer_fruit'
"""

那麼我們就可以通過自定義外來鍵的方式找到需要的資訊了:

#首先獲得水果模型中外來鍵指向的表中物件:
buyer = Buyer.objects.filter(age = 100).first()
 
#然後通過子表中自定義的外來鍵獲取子表的所有資訊:
fruits = buyer.buyer_fruit.all() 

以上這篇django中related_name的用法說明就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。