资讯专栏INFORMATION COLUMN

Django的models中on_delete参数

qylost / 987人阅读

摘要:置空模式,删除的时候,外键字段被设置为空,前提就是定义该字段的时候,允许为空。自定义一个值,该值当然只能是对应的实体

在Django2.0以上的版本中,创建外键和一对一关系必须定义on_delete参数,我们可以在其源码中看到相关信息

class ForeignKey(ForeignObject):
    """
    Provide a many-to-one relation by adding a column to the local model
    to hold the remote value.

    By default ForeignKey will target the pk of the remote model but this
    behavior can be changed by using the ``to_field`` argument.
    """

    # Field flags
    many_to_many = False
    many_to_one = True
    one_to_many = False
    one_to_one = False

    rel_class = ManyToOneRel

    empty_strings_allowed = False
    default_error_messages = {
        "invalid": _("%(model)s instance with %(field)s %(value)r does not exist.")
    }
    description = _("Foreign Key (type determined by related field)")

    def __init__(self, to, on_delete, related_name=None, related_query_name=None,
                 limit_choices_to=None, parent_link=False, to_field=None,
                 db_constraint=True, **kwargs):

to:关联的表

on_delete:当该表中的某条数据删除后,关联外键的操作

related_name:反查参数,设置后可以在被关联表中通过该字段反查外键所在表,默认:set_表名

to_field:默认主键,因为mysql只支持主键作为外键,就算你没显式的创建主键,Django会给你自动创建,如果你是DB-first,且没创建主键:数据库默认使用隐藏字段:DB_ROW_ID作为主键

on_delete参数设置

CASCADE:级联删除,当关联表中的数据删除时,该外键也删除
PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
SET_DEFAULT: 设置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
SET(): 自定义一个值,该值当然只能是对应的实体

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45151.html

相关文章

  • python入门 django入门 (一)

    摘要:本人年开发经验,现就职于电信,因工作需要学习,记录自己的学习记录。 本人java10年开发经验,现就职于电信,因工作需要学习python,记录自己的学习记录。后面也...

    hzc 评论0 收藏0
  • Django搭建个人博客:编写博客文章Model模型

    摘要:在里写一个数据库驱动的应用的第一步是定义模型,也就是数据库结构设计和附加的其它元数据。模型元数据是任何不是字段的东西,例如排序选项数据库表名单数和复数名称和。 Django 框架主要关注的是模型(Model)、模板(Template)和视图(Views),称为MTV模式。 它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 处理与数据相关的所有事务: 如何存取...

    winterdawn 评论0 收藏0
  • django开发,使用drf序列化好友列表

    摘要:本文中讨论的好友列表模型设计如下聊天用户聊天用户好友分组好友分组,备注信息,备注信息添加好友时间更新分组时间好友来源即和互为好友,在数据库中只会保存一条记录,这样节省磁盘空间。 本文中讨论的好友列表模型设计如下: user_id = models.ForeignKey(ChatUserInfo, to_field=chat_id, on_delete=models.DO_NOTHING...

    894974231 评论0 收藏0
  • django开发,使用drf序列化好友列表

    摘要:本文中讨论的好友列表模型设计如下聊天用户聊天用户好友分组好友分组,备注信息,备注信息添加好友时间更新分组时间好友来源即和互为好友,在数据库中只会保存一条记录,这样节省磁盘空间。 本文中讨论的好友列表模型设计如下: user_id = models.ForeignKey(ChatUserInfo, to_field=chat_id, on_delete=models.DO_NOTHING...

    fish 评论0 收藏0
  • Django 学习小组:博客开发实战第一周教程 —— 编写博客 Model 与主页面

    摘要:学习小组是由我发起的一个促进新手互相学习互相帮助的组织。当然如果你不喜欢英文,可以看我们的中文翻译版本入门教程中文翻译版。如果模板文件中有如下代码那么渲染时就会循环渲染篇文章,并且也会被存储在数据库中文章的标题取代。 本教程内容已过时,更新版教程请访问: django 博客开发入门教程。 本节是 Django Blog 项目的开篇,是 Django 学习小组的集体学习成果。Django...

    陈江龙 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<