django數據模型中關於on_delete的使用

1、外鍵的刪除

關於on_delete的總結python

一、常見的使用方式(設置爲null)

class ApiList(models.Model):
	desc = models.CharField(max_length=255, verbose_name="接口描述")
	keyword = models.CharField(max_length=100, verbose_name="請求關鍵字")
	response = models.TextField(verbose_name="響應結果")
	api = models.ForeignKey(Api, blank=True, null=True, on_delete=models.SET_NULL, verbose_name="所屬接口")
	status = models.IntegerField(default=1, verbose_name="狀態")
	create_at = models.CharField(max_length=20, verbose_name="建立時間")
	update_at = models.CharField(max_length=20, verbose_name="更新時間")

二、關於別的屬性的介紹

  • CASCADE:這就是默認的選項,級聯刪除,你無需顯性指定它。
  • PROTECT: 保護模式,若是採用該選項,刪除的時候,會拋出ProtectedError錯誤。
  • SET_NULL: 置空模式,刪除的時候,外鍵字段被設置爲空,前提就是blank=True, null=True,定義該字段的時候,容許爲空。
  • SET_DEFAULT: 置默認值,刪除的時候,外鍵字段設置爲默認值,因此定義外鍵的時候注意加上一個默認值。
  • SET(): 自定義一個值,該值固然只能是對應的實體了

三、補充說明:關於SET()的使用

# 官方案例
def get_sentinel_user():
    return get_user_model().objects.get_or_create(username='deleted')[0]

class MyModel(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET(get_sentinel_user),
    )
相關文章
相關標籤/搜索