天天看點

django orm級聯_Django ORM 級聯删除

在一對多關系中,例如主機對應多個role,每個role對應1個主機,

當删除了某個主機時候,發現對應的role也被删除了,于是查了手冊,應該如下寫:

class Host(models.Model):

hostname = models.CharField(max_length=20,primary_key=True, blank=False)

static_ip = models.CharField(max_length=20,unique = True)

class CCRole(models.Model):

name = models.CharField(max_length = 20,primary_key = True)

host = models.ForeignKey(Host,null=True,blank=True,on_delete=models.SET_NULL)

給ForeignKey增加屬性,

on_delete=models.SET_NULL

即可。

該屬性還有其他值可選:

CASCADE: 預設的,級聯删除

PROTECT: 通過抛出django.db.models.ProtectedErrordjango.db.models.ProtectedError錯誤來阻止删除關聯的對象

SET_NULL: 設定ForeignKey 為 null; 這個隻有設定了null 為 True的情況才能用

SET_DEFAULT: 設定 ForeignKey 為預設值; 預設值必須預先設定

SET(): 設定為某個方法傳回的值

DO_NOTHING: 什麼都不做,如果資料庫設定必須關聯則會報IntegrityError錯