Django學(xué)習(xí)筆記:多表關(guān)系映射
一對(duì)一關(guān)系

類的屬性值是author,但是生成的sql表的字段是author_id,指向author表的字段:id
在一對(duì)一中,添加數(shù)據(jù)有兩種補(bǔ)充外鍵指向的方式


值得注意的是,一對(duì)一的關(guān)系要求了兩個(gè)wife無(wú)法指向同一個(gè)author,一旦執(zhí)行,就會(huì)報(bào)錯(cuò)


不得不說(shuō),django在這方面做的優(yōu)化確實(shí)很方便,減少開發(fā)者用join來(lái)做多表聯(lián)立查詢的次數(shù)
一對(duì)多關(guān)系


但是反向就不能直接用類名小寫了,因?yàn)闀?huì)報(bào)錯(cuò):

我們有兩種方法,最推薦的還是直接'小寫類名_set'屬性值來(lái)獲取攜帶關(guān)聯(lián)信息的類似于objects的對(duì)象,和objects一樣,后面可以接all( ),filter( )來(lái)獲取制定數(shù)據(jù)。

如上圖所示,第二種方法和第一種方法其實(shí)是等價(jià)的,但是顯然第一種更方便一點(diǎn),不必再顯式的利用關(guān)聯(lián)信息去篩選。
多對(duì)多關(guān)系

多對(duì)多的關(guān)系的增加和一對(duì)多類似,一對(duì)多的正向查詢得到是一個(gè)對(duì)象,而多對(duì)多無(wú)論是正向查詢還是反向查詢得到的都是多個(gè)對(duì)象的集合。
既可以正向添加關(guān)系,也可以反向添加,可以說(shuō)是非常靈活了。值得注意的是,方法一和方法二哪怕都執(zhí)行了也是不會(huì)有額外重復(fù)的效果,也就是說(shuō),關(guān)系只能添加一次。
其實(shí)創(chuàng)建對(duì)象和建立關(guān)系可以合為一步,只需把a(bǔ)dd函數(shù)改成create函數(shù)即可。

正向和反向都可以有這種用法:

正向查詢和反向查詢也是類似的用法,這里不再贅述。