首页 > 行业资讯 > Django教程-Django on_delete参数

Django教程-Django on_delete参数

时间:2023-08-18 来源: 浏览:

Django教程-Django on_delete参数

点击关注 Python架构师
Python架构师

gh_1d7504e4dee1

回复:python,领取Python面试题。分享Python教程,Python架构师教程,Python爬虫,Python编程视频,Python脚本,Pycharm教程,Python微服务架构,Python分布式架构,Pycharm注册码。

收录于合集
#django 22
#Django开源项目 33
#Django教程 32
#python web教程 41
#python教程 130
整理: python架构师
Django 提供了许多优点和功能,更改数据库是其最大的好处之一。Django框架可以毫不费力地处理后端进程。Django 模型可以非常灵活地轻松执行创建、删除和更新等过程。在本教程中,我们有 Django on_delete参数的完整指南。
on_delete 是有助于高效执行数据库相关任务的参数之一。在 Django 中建立关系时使用此参数。on_delete 参数允许我们使用外键。
显然,每当出现外键概念时,都希望将on_delete参数声明为外键中的参数之一。
该参数决定是否必须进行删除。它告诉删除父值时要做什么。该选项为面向数据库的操作提供了一定程度的灵活性。
让我们理解以下语法。

Django on_delete 的语法

field name = models.ForeignKey(WASD, on_delete = OPERATION TYPE)

  • 最左边的值表示将在引用中创建的字段。我们需要提及将用于执行特定操作的特定字段。该字段会从父字段中拉取数据,这里需要提及父字段。它将通过框架进一步引用。在数据库中,field_name将充当继承外键值的字段。
  • 右侧,ForeignKey()函数代表外键创建的操作。要在Django中创建foreign,这个函数是必须使用的。接下来,它需要几个参数,我们将在另一个教程中讨论,on_delete就是其中之一。
  • 第一个参数 WASD 表示预期继承的外键。然后,使用on_delete参数来执行各种操作。

资源分享

点击领取:最全Python资料合集

各种删除选项

Django以其强大的关系管理数据库管理系统而闻名。on_delete句柄用于处理参考数据的删除,以维护数据库的完整性。
on_delete 包括以下选项 -
  • CASCADE
  • PROTECT
  • SET_NULL
  • SET_DEFAULT
  • SET()
  • DO_NOTHING

CASCADE

当我们将on_delete参数设置为CASCADE时,删除引用对象也会删除引用的对象。此选项在许多关系中最有用。假设一个帖子有评论;删除帖子后,该帖子的所有评论都会自动删除。当关联的帖子被删除时,我们不希望将评论保存在数据库中。

PROTECT

PROTECT 选项的行为与CASCDE 正好相反;如果我们尝试删除实际的引用对象,则引用对象上的所有数据实例都不会被删除。简而言之,如果数据库中有对象引用,它可以防止被引用的对象被删除。如果帖子包含评论,则无法删除。
如果我们强制删除引用对象,它将引发 ProtectedError ,该错误可以在视图中处理。

SET_NULL

首先,我们需要将外键上的null选项设置为True;我们可以在 on_delete 选项上使用 SET_NULL 选项。当我们删除引用的对象时,引用值将更新为NULL。简单来说,删除帖子但不删除相关评论并设置为 NULL。

SET_DEFAULT

此选项的作用与名称所示相同;它采用定义关系时设置的默认值。当我们删除引用的对象时,引用对象的值将被分配为我们创建的默认值。当我们删除有评论的帖子时,评论会自动分配给我们创建模型的默认帖子。

SET()

它与 SET_DEFAULT 非常相似,但提供了更多的灵活性。当我们删除引用的对象时,引用值将更新为 NULL。因此引用对象的 NULL 值将被替换。

DO_NOTHING

顾名思义,当我们删除引用的对象时,它不会执行任何操作。不建议使用,因为它违反了 RDBMS 的目的。评论仍然涉及甚至不存在的已删除帖子。它会导致很多错误和数据完整性错误。

RESTRICT

RESTRICT 选项与 PROTECT 选项类似,但唯一的区别是当我们删除引用对象时 on_delete 会引发 RestrictedError 。但是,如果引用对象和引用对象的对象分配给不同的公共对象,则 RESTRICT 将提供删除引用对象的功能。

例子

Modle.py 文件

from django.db import models # Create your models here. class Auther ( models . Model ): first_name = models.CharField(max_length= 30 ) last_name = models.CharField(max_length= 30 ) email = models.EmailField() def __str__ ( self ) : return "%s %s" % ( self .first_name, self .last_name) class Post ( models . Model ): title = models.CharField(max_length= 100 ) # Here we define the on_delete as CASCADE author = models.ForeignKey(Auther, on_delete=models.CASCADE) def __str__ ( self ) : return self .title

我们创建了两个模型:Author 和 Post。在 post 模型中,我们定义一个名为Author 的外键字段,引用 Author 的对象。然后我们将on_delete参数定义为CASCADE。
要在控制面板中显示模型,需要在admin126459646.py文件中注册。
admin126459646.py

from django .contrib import admin126459646 from .models import Post , Author # Register your models here . admin126459646 .site .register ( Post ) admin126459646 .site .register ( Author )

创建帖子和作者后,我们的数据库中有以下数据。
Author

Post

现在,我们删除了《You can win》一书的作者。删除该作者后,相关帖子也会自动删除。现在,我们的数据库将如下所示。
Post

在下一个示例中,我们将on_delete的属性从 CASCADE 更改为 IS_NULL 并迁移数据库。让我们看看它对数据库有何影响。

# Here we define the on_delete as IS_NULL author = models.ForeignKey(Author, on _delete=models.SET_NULL, null = True )

我们删除作者姓名“Mathew Barnard”,与该作者关联的帖子将设置为空。

我们已经展示了on_delete选项的两个示例。您可以创建自己的模型并应用每个选项并观察结果。

结论

在本文中,我们提到了如何在外键中使用on_delete参数。它提供了删除记录并控制删除对引用记录的影响的灵活性。它需要多个选项,每个选项都允许我们控制引用数据的行为。
 
热门推荐
  • Python 3.11 的那些高效新特性!

  • Django教程-重定向

  • Django教程-DjangoCRUD(创建、读取、更新、删除)

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐