ForeignKey.on_delete

时间:2021-03-27 03:17:04

当由一个 ForeignKey 引用的对象被删除,默认情况下,Django模拟SQL的 ON DELETE CASCADE 来删除对象的 ForeignKey 关系。这样可以覆盖指定的 on_delete 参数。比如,你有一个可为空的 ForeignKey ,你想他引用的对象被删除时,该项为空。

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

django.db.models 中的 on_delete 存在以下设置值:

CASCADE

级联删除默认值。

PROTECT

阻止删除 django.db.IntegrityError 的子类 ProtectedError 引用的对象。

SET_NULL

设置 ForeignKey 为空。只有 null 为 True 时才可设置。

SET_DEFAULT

设置 ForeignKey 的默认值,而且必须得设置。

SET()

设置 ForeignKey 的值传递给 SET() ,并允许可调用的对象调用它。大多数情况下通过调用是必要的,这样可以避免执行查询时models.py被导入。

def get_sentinel_user():
return User.objects.get_or_create(username='deleted')[0] class MyModel(models.Model):
user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))

DO_NOTHING

不采取任何行动。如果你的数据库后端强制引用完整性,这将导致 IntegrityError 错误,除非手动添加SQL数据库中的 ON DELETE  字段进行约束。