django模型中有外鍵關系的表刪除相關設置


0904自我總結

django模型中有外鍵關系的表刪除相關設置

一.一對一

例如有Author、AuthorDetail兩表

author = models.OneToOneField(to='Author', null=True,
        related_name='detail',
        db_constraint=False,
        on_delete=models.CASCADE
    )

1)關系字段放在AuthorDetail表中:作者刪除詳情刪除,詳情刪除作者保留
2)作者找詳情用 外鍵related_name(detail),詳情找作者用 外鍵字段(author)
3)db_constraint斷開表關聯,on_delete規定邏輯關聯刪除動作,models.CASCADE級聯刪除

二.一對多

例如Book、Publish兩表

publish = models.ForeignKey(to='Publish', null=True,
        related_name='books',
        db_constraint=False,
        on_delete=models.DO_NOTHING,
        
    )

1)關系字段放在Book表中(多的一方):出版社刪除書外鍵不動,書刪除沒有任何影響
2)出版社找書用 外鍵related_name(books),書找出版社 外鍵字段(publish)
3)db_constraint斷開表關聯,on_delete規定邏輯關聯刪除動作,models.DO_NOTHING關聯無動作

三.以外鍵字段關聯

1)斷關聯,刪除關聯表記錄,外鍵值置空
db_constraint=False, on_delete=models.SET_NULL, null=True,

2)斷關聯,刪除關聯表記錄,外鍵值置默認值
db_constraint=False, on_delete=models.SET_DEFAULT, default=1,

注意:on_delete必須聲明models.DO_NOTHING為刪除級聯關系, models.CASCAD為級聯關系,'SET_NULL'置空,SET_DEFAULT設為默認值

兩者區別

  • models.SET關聯表內容刪了,關聯的相關內容不會刪除
  • models.CASCAD關聯表內容刪了,關聯的相關內容會刪除

db_constraint關系斷開后,但是不影響聯表查詢

四.多對多關系

例如Book、Author兩表

authors = models.ManyToManyField(to='Author', null=True,
        related_name='books',
        db_constraint=False,
    )

1)關系字段放在任意一方都可以:出版社刪除或書刪除彼此不影響,但關系表一定級聯刪除
2)正向找 外鍵字段,反向找 外鍵字段related_name
3)db_constraint斷開表關聯,on_delete不存在(不設置,本質在第三張表中設置,且一定是級聯)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM