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

0904自我總結

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

一.一對一

例若有Author、AuthorDetail兩表python

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級聯刪除django

二.一對多

例如Book、Publish兩表code

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關聯無動做class

三.之外鍵字段關聯

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

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

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

二者區別db

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

db_constraint關係斷開後,可是不影響聯表查詢auth

四.多對多關係

例如Book、Author兩表co

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

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

相關文章
相關標籤/搜索