📜  django on_delete 规则 - Python (1)

📅  最后修改于: 2023-12-03 14:40:46.435000             🧑  作者: Mango

Django中的on_delete规则

在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文档