2018-05-25

Django模型關(guān)系

  • 1:1

    • OneToOneField
    • 內(nèi)部實(shí)現(xiàn)
      • 使用外鍵,F(xiàn)oreignKey實(shí)現(xiàn)
      • 對(duì)外鍵添加了一個(gè)唯一約束
    • 數(shù)據(jù)添加
      • 主表未添加數(shù)據(jù)而從表添加數(shù)據(jù)時(shí)耕餐,系統(tǒng)會(huì)報(bào)錯(cuò)(1602)違反了唯一性約束
      • 報(bào)錯(cuò)后主表添加后凡傅,從表添加時(shí)id變?yōu)橹鞅韎d+(報(bào)錯(cuò)次數(shù))
      • 原因是數(shù)據(jù)在存儲(chǔ)時(shí)會(huì)先報(bào)錯(cuò)后判斷,再刪除肠缔,但仍然會(huì)占用id資源
    • 數(shù)據(jù)刪除
      • 默認(rèn)

        • CASECADE
        • 當(dāng)聲明關(guān)系的表中數(shù)據(jù)被刪除夏跷,關(guān)聯(lián)表數(shù)據(jù)不會(huì)受影響
        • 當(dāng)被關(guān)聯(lián)的表中的數(shù)據(jù)被刪除,關(guān)系表數(shù)據(jù)會(huì)被級(jí)聯(lián)刪除
      • PROTECT(在關(guān)系屬性中設(shè)置)

        • 主表數(shù)據(jù)如果存在級(jí)聯(lián)數(shù)據(jù)明未,主表就不能刪除
        • 當(dāng)主表數(shù)據(jù)不存在級(jí)聯(lián)數(shù)據(jù)槽华,主表數(shù)據(jù)允許刪除
        • 開發(fā)中推薦使用這種方式
      • SET(在一對(duì)一關(guān)系中無法使用,因?yàn)榇嬖谖ㄒ患s束)

        • DEFAULT
        • NULL
        • XXX
      • 主從表

        • 聲明關(guān)系的就是從表
        • 哪張表聲明關(guān)系趟妥,哪張表就相對(duì)來說不重要
      • 級(jí)聯(lián)數(shù)據(jù)獲取

        • 從表獲取主表

          • 通過顯性屬性進(jìn)行獲取
          • 顯示屬性是關(guān)系猫态,關(guān)心就是我們關(guān)聯(lián)到的主表的對(duì)象
        • 主表獲取從表

          • 隱性屬性(就是關(guān)聯(lián)表的模型名(小寫))

          • 通過隱性屬性獲取

          • 屬性值就是從表的對(duì)象

          • 方法二:

            • 通過從表對(duì)象獲取
            • 從表對(duì)象=模型類.objects.get(隱性id=num)
            • 通過關(guān)系查詢往往會(huì)降低查詢性能,所以此方法相當(dāng)于對(duì)數(shù)據(jù)查詢進(jìn)行優(yōu)化
  • 1:M

    • ForeignKey
    • 內(nèi)部實(shí)現(xiàn)
      • 真的就是使用了外鍵實(shí)現(xiàn)的
      • 沒有了一對(duì)一的約束
    • 刪除數(shù)據(jù)
      • 默認(rèn)
      • CASECADE
        • 主表刪除數(shù)據(jù)披摄,從表級(jí)聯(lián)的所有數(shù)據(jù)消失
        • 從表刪除數(shù)據(jù)懂鸵,主表不受影響
      • SET_NULL(前提條是字段屬性可以為空,null=Ture)
        • 主表刪除數(shù)據(jù)行疏,從表級(jí)聯(lián)的所有數(shù)據(jù)的關(guān)系id變?yōu)閚ull
      • SET_DEFAULT(設(shè)置default時(shí)必須設(shè)置存在的pk,一般為系統(tǒng)設(shè)置的默認(rèn)值)
        • 主表刪除數(shù)據(jù)套像,從表級(jí)聯(lián)的所有數(shù)據(jù)的關(guān)系id變?yōu)閐efault值
      • 數(shù)據(jù)查詢
        • 多獲取一
          • 使用的顯性屬性酿联,屬性值就是一的對(duì)象
          • 可以直接使用
        • 一獲取多
          • 使用的是隱性屬性
          • 一對(duì)象.級(jí)聯(lián)數(shù)據(jù)_set(級(jí)聯(lián)數(shù)據(jù)為級(jí)聯(lián)模型名(小寫)),是一個(gè)Manager的子類RelatedManager對(duì)象
          • 可以支持Manager篩選操作
          • all( )
          • filter( )
          • exclude( )
          • order_by( )
          • Manager支持的操作夺巩,都支持
          • 支持 remove(關(guān)系字段允許為空)(必須先獲取后移除贞让,結(jié)果為被刪除學(xué)生的關(guān)系id字段值為null)
            • clear
            • add(添加時(shí)注意:被添加對(duì)象從objects對(duì)象中用get(pk=num)獲取)
  • M:N

    • 多對(duì)多
      • 使用ManyToManyField
      • 如果兩張表的關(guān)系為多對(duì)多柳譬,會(huì)生成額外的第三張表喳张,作為關(guān)系表兩,記錄的是兩張表的pk_id
      • 關(guān)系表中 UNIQUE(xx,yy)
        • (1,1),(1,2),(1,3)
        • (2,1),(2,2),(3,2)
        • (2,2)不能添加
        • 兩張表的PK_id可以相等美澳,但不能有重復(fù)的添加(特點(diǎn):添加重復(fù)不報(bào)錯(cuò))
      • 多對(duì)多也是外鍵實(shí)現(xiàn)的
      • 在多對(duì)多的關(guān)系中销部,使用兩個(gè)外鍵實(shí)現(xiàn)
    • 主從表各自添加數(shù)據(jù)
      • 多對(duì)多模型關(guān)系中主表和從表的添加之間不存在特定關(guān)系
      • 從表的關(guān)系屬性數(shù)據(jù)添加不需要指定摸航,故可以忽略
    • 從表(聲明關(guān)系的表)添加到主表
      • 各自查詢自己的對(duì)象
      • 從表對(duì)象.從表關(guān)系屬性不再是單一的主表對(duì)象(可以理解為主表對(duì)象集合)
      • 變成了一個(gè)ManyRelatedManager下的對(duì)象
        • add( )
        • clear( )
        • remove( )
        • all( )
        • filter( )
        • exclude( )
        • get ( )
      • 查詢使用的是顯性屬性
    • 主表添加到從表
      • 是一個(gè)Manager是隱性屬性
      • 主表對(duì)象.從表模型名_set 對(duì)象屬于ManyRelatedManager這個(gè)類 (可以理解為從表對(duì)象的一個(gè)集合對(duì)象)
        • add ( )
        • all ( )
        • remove ( )
    • 刪除數(shù)據(jù)
      • 不管主表還是從表數(shù)據(jù)刪除,都不會(huì)互相影響
      • 刪除自己的數(shù)據(jù)舅桩,并且刪除關(guān)系表中的數(shù)據(jù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酱虎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子擂涛,更是在濱河造成了極大的恐慌读串,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撒妈,死亡現(xiàn)場(chǎng)離奇詭異恢暖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)狰右,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門杰捂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挟阻,你說我怎么就攤上這事琼娘。” “怎么了附鸽?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵脱拼,是天一觀的道長。 經(jīng)常有香客問我坷备,道長熄浓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任省撑,我火速辦了婚禮赌蔑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竟秫。我一直安慰自己娃惯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布肥败。 她就那樣靜靜地躺著趾浅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馒稍。 梳的紋絲不亂的頭發(fā)上皿哨,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音纽谒,去河邊找鬼证膨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鼓黔,可吹牛的內(nèi)容都是我干的央勒。 我是一名探鬼主播不见,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼订歪!你這毒婦竟也來了脖祈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤刷晋,失蹤者是張志新(化名)和其女友劉穎盖高,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眼虱,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喻奥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捏悬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撞蚕。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖过牙,靈堂內(nèi)的尸體忽然破棺而出甥厦,到底是詐尸還是另有隱情,我是刑警寧澤寇钉,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布刀疙,位于F島的核電站,受9級(jí)特大地震影響扫倡,放射性物質(zhì)發(fā)生泄漏谦秧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一撵溃、第九天 我趴在偏房一處隱蔽的房頂上張望疚鲤。 院中可真熱鬧,春花似錦缘挑、人聲如沸集歇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鬼悠。三九已至,卻和暖如春亏娜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬挺。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工维贺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巴帮。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓溯泣,卻偏偏與公主長得像虐秋,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子垃沦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容