我对Django非常熟悉,但是最近发现on_delete=models.CASCADE
模型中存在一个选项,我在文档中搜索了相同的选项,但找不到以下内容:
在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是做什么的?(我想如果删除html" target="_blank">模型,要执行的操作)
怎么models.CASCADE
办?(文档中的任何提示)
还有其他可用的选项(如果我的猜测是正确的)?
有关此文档的位置在哪里?
这是删除引用对象时采取的行为。它不是特定于Django的,这是一种SQL标准。
发生此类事件时,有6种可能的操作:
CASCADE
:删除引用的对象时,还请删除对其具有引用的对象(例如,删除博客文章时,你可能还希望删除注释)。SQL等效项:CASCADE。PROTECT
:禁止删除引用的对象。要删除它,你将必须删除所有手动引用它的对象。SQL等效项:RESTRICT。SET_NULL
:将引用设置为NULL(要求该字段可为空)。例如,当你删除用户时,你可能希望保留他在博客文章中发布的评论,但说该评论是由匿名(或已删除)用户发布的。SQL等效项:SET NULL。SET_DEFAULT
:设置默认值。SQL等效项:SET DEFAULT。SET(...)
:设置给定值。这不是SQL标准的一部分,完全由Django处理。DO_NOTHING
:这可能是一个非常糟糕的主意,因为这会在数据库中创建完整性问题(引用实际上不存在的对象)。SQL等效项:NO ACTION
。例如,另请参阅PostGreSQL文档。
在大多数情况下,这CASCADE
是预期的行为,但是对于每个ForeignKey,你应始终问自己在这种情况下的预期行为是什么。PROTECT
并且SET_NULL通常很有用。设置CASCADE不应该设置的位置,可以通过简单地删除单个用户来级联删除所有数据库。
附加说明以阐明级联方向
有趣的是,注意到CASCADE
行动的方向对于许多人来说并不明确。事实上,这很有趣地看到,只有该CASCADE行动并不清楚。我知道级联行为可能会造成混淆,但是你必须认为它与任何其他动作是同一方向。因此,如果你觉得自己CASCADE不清楚方向,那实际上意味着on_delete
你不清楚自己的行为。
在你的数据库中,外键基本上由一个整数字段表示,该值是外对象的主键。假设你有一个comment_A条目,该条目具有一个article_B条目的外键。如果你删除条目comment_A,那么一切都很好,article_B以前可以不带有comment_A生存,并且也不会被删除。但是,如果删除article_B
,则comment_A
会慌!它永远都离不开article_B并需要它,它是它属性的一部分(article=article_B
,但是 article_B * ???)。这是on_delete
确定如何解决此完整性错误的步骤,或者说:
我希望它使级联方向更清晰。:)
我对Django非常熟悉,但最近我注意到在模型上有一个 现在可以用作第二个位置参数(以前它通常只作为关键字参数传递)。它将是Django 2.0中的必需参数。 使用的一个例子是: on_delete做什么?(我猜删除模型后要执行的操作。) 做什么?(文档中的任何提示) 还有什么其他选择(如果我的猜测是正确的)? 这方面的文档存放在哪里?
我对Django非常熟悉,但最近注意到在_delete=models上存在一个和选项, > 我已搜索了相同的文档,但除了以下内容外,找不到其他内容: Django 2.0 多对一的关系。需要两个位置参数:与模型相关的类和on_delete选项。要创建递归关系(一个与自身具有多对一关系的对象),请使用models.ForeignKey('self',on_delete=models.CASCADE)
我想修改一个外键值,当它从数据库中删除。所以我看了医生,用on_delete=模型。SET(foo)方法.https://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.SET 这是我的模型定义 这是我的方法,被称为删除 然而这里的问题是,我不能将参数传递给这个方法,这就是为什么我不能知道删除了哪个产品。我还试着在
在django模型中使用“on_delete=models.CASCADE”时会发生什么
本文向大家介绍泛型有什么作用?相关面试题,主要包含被问及泛型有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 泛型有什么作用? 作者:rottenpen
问题内容: 我只是好奇是否有人知道django的orm有什么理由不在模型上调用“full\u clean”,除非它被保存为模型表单的一部分。 请注意,调用模型的save()方法时,不会自动调用full\ u clean()。当您要为自己手动创建的模型运行一步模型验证时,需要手动调用它。django完全干净的医生 (注:Django 1.6的报价已更新。。。以前的django文档也对ModelFor