我很熟悉Django,但我最近注意到存在一个on_delete=models。级联选项与模型。我已经搜索了相同的文档,但我找不到更多的东西:
在Django 1.9中更改:
On_delete现在可以用作第二个位置参数(以前它通常只作为关键字参数传递)。它将是Django 2.0中必须的参数。
用法示例如下:
from django.db import models
class Car(models.Model):
manufacturer = models.ForeignKey(
'Manufacturer',
on_delete=models.CASCADE,
)
# ...
class Manufacturer(models.Model):
# ...
pass
on_delete做什么?(我猜如果模型被删除了要做的动作。)
什么是模型。级联做什么?(文档中的提示)
还有什么其他的选择(如果我的猜测是正确的)?
这方面的文档放在哪里?
这是你的问题的答案,说:为什么我们使用on_delete?
当一个被ForeignKey引用的对象被删除时,Django默认会模仿SQL约束ON DELETE CASCADE的行为,同时也会删除包含ForeignKey的对象。可以通过指定on_delete参数来重写此行为。例如,如果你有一个可为空的ForeignKey,并且你想在删除引用对象时将它设置为空:
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
on_delete的可能值可以在django.db.models中找到:
CASCADE:级联删除;默认值。
PROTECT:通过引发ProtectedError (django.db.IntegrityError的子类)来防止被引用对象的删除。
SET_NULL:设置ForeignKey为空;这只有在null为True时才有可能。
SET_DEFAULT:设置ForeignKey为默认值;必须设置一个默认的ForeignKey。
on_delete方法用于告诉Django如何处理依赖于你删除的模型实例的模型实例。(例如一个ForeignKey关系)。on_delete =模型。CASCADE告诉Django级联删除效果,即继续删除依赖模型。
Here's a more concrete example. Assume you have an Author model that is a ForeignKey in a Book model. Now, if you delete an instance of the Author model, Django would not know what to do with instances of the Book model that depend on that instance of Author model. The on_delete method tells Django what to do in that case. Setting on_delete=models.CASCADE will instruct Django to cascade the deleting effect i.e. delete all the Book model instances that depend on the Author model instance you deleted.
注意:on_delete将在Django 2.0中成为必选参数。在旧版本中,它默认为CASCADE。
这是完整的官方文件。
简单地说,on_delete是一条指令,用于指定在删除外部对象时将对对象进行哪些修改:
CASCADE:当外部对象被删除时,将删除子对象
SET_NULL:将子对象外键设置为null
SET_DEFAULT:在创建模型时将子对象设置为给定的默认数据
RESTRICT:在某些条件下引发RestrictedError。
PROTECT:防止外部对象被删除,只要有子对象从它继承
额外的链接:
https://docs.djangoproject.com/en/4.0/ref/models/fields/#foreignkey
这是你的问题的答案,说:为什么我们使用on_delete?
当一个被ForeignKey引用的对象被删除时,Django默认会模仿SQL约束ON DELETE CASCADE的行为,同时也会删除包含ForeignKey的对象。可以通过指定on_delete参数来重写此行为。例如,如果你有一个可为空的ForeignKey,并且你想在删除引用对象时将它设置为空:
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
on_delete的可能值可以在django.db.models中找到:
CASCADE:级联删除;默认值。
PROTECT:通过引发ProtectedError (django.db.IntegrityError的子类)来防止被引用对象的删除。
SET_NULL:设置ForeignKey为空;这只有在null为True时才有可能。
SET_DEFAULT:设置ForeignKey为默认值;必须设置一个默认的ForeignKey。