python django中的orm外鍵級聯刪除

 

今天添加了一個路由表,路由表作外鍵,而後添加了幾個組,路由表爲組的外鍵,當我使用刪除功能對路由表進行刪除時,競然將個人組也至關的刪除了;儘管這是測試,但放到生產環境中仍是會發生意外的;這個問題要解決;python

在網上查了一下資料,問題主要是django orm的field字段有關;django

routemgr = models.ForeignKey('Routemgr',default=1,blank=True,null=True,on_delete=models.SET_NULL)

主要意思就是把Routemgr這個ForeignKey的字段設置爲null 並使用 python manage.py makemigrations 與 python manage.py migrate 進行數據遷移;這樣設置成功後再刪除就只是把routemgr對應的字段刪除而不是它所關聯的整個實體了;測試

 

關於ForeignKey.on_delete的幾個選項;spa

當一個model對象的ForeignKey關聯的對象被刪除時,默認狀況下此對象也會一塊兒被級聯刪除的。orm

CASCADE:默認值,model對象會和ForeignKey關聯對象一塊兒被刪除對象

SET_NULL:將model對象的ForeignKey字段設爲null。固然須要將null設爲True。路由

SET_DEFAULT:將model對象的ForeignKey字段設爲默認值。io

Protect:刪除ForeignKey關聯對象時會生成一個ProtectedError,這樣ForeignKey關聯對象就不會被刪除了。route

相關文章
相關標籤/搜索