小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Django 模型類ForeignKey 選項(xiàng)參數(shù)

 rongq2007 2021-07-18

https://blog.csdn.net/hpu_yly_bj/article/details/78939748

to_fields   

被關(guān)聯(lián)字段用于關(guān)聯(lián)的字段,默認(rèn)情況下,Django使用被關(guān)聯(lián)對(duì)象的主鍵

如果主表的主鍵有可能發(fā)生改變,則需要在外鍵字段的參數(shù)中to_fields指定到被關(guān)聯(lián)主表的一個(gè)必傳(unique)的某個(gè)字段,使其不影響之前的業(yè)務(wù)邏輯

relate_name   

舉例:一個(gè)人物信息表(PeopleInfo)擁有的字段是models.ForeignKey(Book),則默認(rèn)會(huì)有一個(gè)relate_name為"peopleinfo_set"(被關(guān)聯(lián)模型類小寫(xiě)+_set),如果在外鍵關(guān)系里修改了relate_name ,如,model.ForeignKey(Book, relate_name=“person”),則People的對(duì)象描述符號(hào)就變成了“person”,可以通過(guò)book.person 取到所有關(guān)聯(lián)這本書(shū)的人物 (未指定之前是通過(guò)book.peopleinfo_set)  

真正的用處是在一個(gè)對(duì)象被另一個(gè)對(duì)象關(guān)聯(lián)不止一次時(shí),這個(gè)參數(shù)才真正有用

舉例:如果一個(gè)Story 對(duì)象既有frist_category 字段,又又second_category 字段,為確保Category 對(duì)象擁有正確的對(duì)象描述符,需要指定relate_name

      models.ForeignKey(Category, relate_name="first_story")

      models.ForeignKey(Category, relate_name="second_story")

這樣 Category對(duì)象才會(huì)自動(dòng)擁有frist_story和second_story 的對(duì)象描述符

https://blog.csdn.net/hpu_yly_bj/article/details/78939748

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就是在子表中定義的外鍵字段,如下:

————————————————

版權(quán)聲明:本文為CSDN博主「lotusgrm」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/hpu_yly_bj/article/details/78939748

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多