django中related_name的用法說(shuō)明
我們從一個(gè)簡(jiǎn)單的事說(shuō)起:
吃貨君到水果攤撿漏買(mǎi)了兩種水果,分別是人參果和蟠桃;后來(lái)水果攤主冥冥中感覺(jué)自己遺失了重寶,似乎和一個(gè)100歲的老爺爺有關(guān),翻看自己的收款賬單,當(dāng)看到吃貨君的賬單時(shí)心頭一緊,就是他買(mǎi)走了我的寶貝,我就要看看他買(mǎi)了我的什么寶貝! 店主通過(guò)吃貨君的名字找到了他買(mǎi)的水果,發(fā)現(xiàn)竟然有萬(wàn)年蟠桃以及億年人參過(guò)后,嚎啕大哭起來(lái)?。?!
吃飯君是走了什么運(yùn)呢???
下面我們根據(jù)上面的小情節(jié)定義兩個(gè)模型,分別是買(mǎi)主模型以及水果模型,一個(gè)買(mǎi)主對(duì)應(yīng)多個(gè)水果模型,簡(jiǎn)單的一對(duì)多模型:
class Buyer(models.Model): name = models.CharField(verbose_name='買(mǎi)主名', max_length=10) Alipay_id = models.CharField(verbose_name='支付寶賬號(hào)') age = models.IntegerField(verbose_name='買(mǎi)主年齡',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='水果重量')
通常,我們要查詢(xún)買(mǎi)主買(mǎi)了哪些水果,首先要根據(jù)條件找到買(mǎi)主信息,然后根據(jù)買(mǎi)主信息找到買(mǎi)主所購(gòu)買(mǎi)的水果,本例中如下:
#首先獲得水果模型中外鍵指向的表中對(duì)象: buyer = Buyer.objects.filter(age = 100).first() #然后通過(guò)‘_set'方法獲得子表中的數(shù)據(jù): fruits = buyer.fruit_set.all() """ django 默認(rèn)每個(gè)主表的對(duì)象都有一個(gè)是外鍵的屬性,可以通過(guò)它來(lái)查詢(xún)到所有屬于主表的子表的信息。 這個(gè)屬性的名稱(chēng)默認(rèn)是以子表的名稱(chēng)小寫(xiě)加上_set()來(lái)表示,這里我們的主表是buyer,字表是fruit,所以主表外鍵的屬性就是fruit_set """
上面的fruit_set是django為對(duì)象buyer默認(rèn)創(chuàng)建的外鍵的屬性,個(gè)人建議采用自定義的方式定義主表的外鍵,這樣使用時(shí)更熟悉一些吧!
而related_name就實(shí)現(xiàn)這個(gè)功能,在字表中定義外鍵時(shí),增加related_name字段指定這個(gè)字表在主表中對(duì)應(yīng)的外鍵屬性,
如下:
class Fruit(models.Model): buyer = models.ForeignKey(Buyer, related_name='buyer_fruit') """ 主表:buyer 子表:fruit 子表在主表中對(duì)應(yīng)的外鍵屬性:related_name='buyer_fruit' """
那么我們就可以通過(guò)自定義外鍵的方式找到需要的信息了:
#首先獲得水果模型中外鍵指向的表中對(duì)象: buyer = Buyer.objects.filter(age = 100).first() #然后通過(guò)子表中自定義的外鍵獲取子表的所有信息: fruits = buyer.buyer_fruit.all()
以上這篇django中related_name的用法說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決python os.mkdir創(chuàng)建目錄失敗的問(wèn)題
今天小編就為大家分享一篇解決python os.mkdir創(chuàng)建目錄失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python模塊/包/庫(kù)安裝的六種方法及區(qū)別
這篇文章主要介紹了Python模塊/包/庫(kù)安裝六種方法,通過(guò)實(shí)例代碼給大家介紹了python中模塊、包、庫(kù)的區(qū)別和使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02使用python3批量下載rbsp數(shù)據(jù)的示例代碼
這篇文章主要介紹了使用python3批量下載rbsp數(shù)據(jù)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python實(shí)現(xiàn)最大優(yōu)先隊(duì)列
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)最大優(yōu)先隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08python之如何使用openpyxl設(shè)置單元格樣式
這篇文章主要介紹了python之如何使用openpyxl設(shè)置單元格樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06極簡(jiǎn)Python庫(kù)CherryPy構(gòu)建高性能Web應(yīng)用實(shí)例探索
今天為大家介紹的是 CherryPy,它是一個(gè)極簡(jiǎn)、穩(wěn)定且功能強(qiáng)大的Web框架,可以幫助開(kāi)發(fā)者快速構(gòu)建高性能的 Web 應(yīng)用程序,使用 CherryPy,你可以輕松地創(chuàng)建RESTful API、靜態(tài)網(wǎng)站、異步任務(wù)和 WebSocket 等應(yīng)用2024-01-01