on_delete = models.PROTECT和on_delete = models.CASCADE在Django模型上做什么?

Jus*_*ill 3 python django django-models

我对Django非常熟悉,但是最近发现模型中存在on_delete=models.CASCADEon_delete=models.PROTECT选项,

  • on_delete=models.CASCADEon_delete=models.PROTECT两者都在做同样的事情。
  • 或两者都相同(我使用了唯一的on_delete=models.CASCADE,当我删除父条目时,它将删除所有相关条目)

    我已经搜索了相同的文档,但找不到以下内容:

Django 2.0

多对一关系。需要两个位置参数:与模型相关的类和on_delete选项。要创建递归关系(一个与自身具有多对一关系的对象),请使用models.ForeignKey('self',on_delete = models.CASCADE)。

Muj*_*que 28

为了on_delete=models.CASCADE

您有 2 个模型,即CarCompany。你删除了该公司,你也就删除了该公司生产的汽车。

为了on_delete=models.PROTECT

你有 2 个模型。汽车公司。你删除公司,姜戈说,等等。做不到……所以一切都剩下了。

这就是您将看到的内容。在此输入图像描述

  • @Zhenia 换句话说,“on_delete”函数是 Django 处理因链接对象被删除而变得无效的链接的方式。但如果您删除汽车,它不会影响公司,因为它不链接到汽车。 (2认同)

Exp*_*tor 8

  • CASCADE 级联删除。Django模拟的行为, SQL constraint ON DELETE CASCADE并删除包含的对象ForeignKey

  • PROTECT 防止通过raising ProtectedError的子类删除引用的对象django.db.IntegrityError

这些东西会被删除,因为一旦您更改了模型,就需要进行更改makemigrationsmigrate查看更改。

  • 这篇中等帖子有一个非常清晰的解释:https://medium.com/@inem.patrick/django-database-integrity-foreignkey-on-delete-option-db7d160762e4 (5认同)