django開發系列:ORM數據庫外鍵使用詳解

django開發系列:ORM數據庫外鍵使用詳解

ORM外鍵使用

article是文章,category是文章分類,注意分類必須先存在,所以要先保存

category = Category(name='最新文章')
category.save()
article = Article(title='abc',content='111')
article.category = category
article.save()

外鍵刪除操作:

如果一個模型使用了外鍵。那麼在對方那個模型被刪掉後,該進行什麼樣的操作。可以通過on_delete來指定。可以指定的類型如下:

  1. CASCADE:級聯操作。如果外鍵對應的那條數據被刪除了,那麼這條數據也會被刪除。
  2. PROTECT:受保護。即只要這條數據引用了外鍵的那條數據,那麼就不能刪除外鍵的那條數據。如果我們強行刪除,Django就會報錯。
  3. SET_NULL:設置爲空。如果外鍵的那條數據被刪除了,那麼在本條數據上就將這個字段設置爲空。如果設置這個選項,前提是要指定這個字段可以爲空。
  4. SET_DEFAULT:設置默認值。如果外鍵的那條數據被刪除了,那麼本條數據上就將這個字段設置爲默認值。如果設置這個選項,前提是要指定這個字段一個默認值 。
  5. SET():如果外鍵的那條數據被刪除了。那麼將會獲取SET函數中的值來作爲這個外鍵的值。SET函數可以接收一個可以調用的對象(比如函數或者方法),如果是可以調用的對象,那麼會將這個對象調用後的結果作爲值返回回去。可以不用指定默認值 。
  6. DO_NOTHING:不採取任何行爲。一切全看數據庫級別的約束。

以上這些選項只是Django級別的,數據級別依舊是RESTRICT!

數據庫層面的約束有四種:

  1. RESTRICT:默認的選項,如果想要刪除父表的記錄時,而在子表中有關聯該父表的記錄,則不允許刪除父表中的記錄;
  2. NOACTION:同RESTRICT效果一樣,也是首先先檢查外鍵;
  3. CASCADE:父表delete、update的時候,子表會delete、update掉關聯記錄;
  4. SET NULL:父表delete、update的時候,子表會將關聯記錄的外鍵字段所在列設爲null,所以注意在設計子表時外鍵不能設爲not null;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章