📅  最后修改于: 2023-12-03 14:40:46.435000             🧑  作者: Mango
在Django中,当我们定义了一个ForeignKey
或者OneToOneField
字段时,需要为其指定一个on_delete
参数来定义删除时的行为。on_delete
参数有以下选项:
CASCADE
: 级联删除。当引用对象被删除时,同时也会删除所有引用该对象的对象。PROTECT
: 保护。当引用对象被删除时,会抛出ProtectedError
异常。这是默认值。SET_NULL
: 设置为NULL。当引用对象被删除时,将引用该对象的字段设置为NULL。SET_DEFAULT
: 设置为默认值。当引用对象被删除时,将引用该对象的字段设置为其默认值。SET()
: 自定义设置。当引用对象被删除时,将引用该对象的字段设置为自定义的值。该值应该是一个可调用对象,接收一个参数,返回新的值。DO_NOTHING
: 什么都不做。当引用对象被删除时,不进行任何操作。以下是一个示例:
class Blog(models.Model):
name = models.CharField(max_length=100)
class Author(models.Model):
name = models.CharField(max_length=50)
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
authors = models.ManyToManyField(Author)
headline = models.CharField(max_length=255)
在上述定义中,当Blog
对象被删除时,与其相关的Entry
对象也将被删除。而当Author
对象被删除时,Entry
对象并不会被删除,只是移除了该作者的关联。
注意:如果你想要使用SET_NULL
规则,那么你需要确保所引用的外键字段是允许为空的,否则会引发数据库完整性错误。
参考资料:Django文档