在一對多關系中,例如主機對應多個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錯