首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模型实例上的Django反向(on_delete)保护

Django是一个流行的Python Web框架,它提供了一种简单而强大的方式来构建Web应用程序。在Django中,模型实例之间的关系可以通过外键字段来建立。当一个模型实例被删除时,外键字段上的on_delete属性可以用来指定删除关联模型实例时的行为。

on_delete属性用于指定当关联的模型实例被删除时,外键字段应该如何处理。它可以设置为以下几种选项:

  1. CASCADE(级联删除):当关联的模型实例被删除时,外键字段也会被删除。这是默认的行为。
  2. PROTECT(保护):当关联的模型实例被删除时,会抛出ProtectedError异常,阻止删除操作。
  3. SET_NULL(设置为NULL):当关联的模型实例被删除时,外键字段会被设置为NULL。前提是该外键字段允许为空。
  4. SET_DEFAULT(设置为默认值):当关联的模型实例被删除时,外键字段会被设置为默认值。前提是该外键字段有默认值。
  5. SET():当关联的模型实例被删除时,外键字段会被设置为指定的值。可以是一个具体的值或一个可调用对象。
  6. DO_NOTHING(不采取任何行动):当关联的模型实例被删除时,外键字段不会受到任何影响。需要注意的是,如果删除了关联的模型实例,而外键字段仍然引用该实例,可能会导致数据不一致。

Django的on_delete属性提供了灵活的选项,可以根据具体的业务需求来选择适当的行为。在实际应用中,可以根据模型之间的关系和业务逻辑来选择合适的on_delete选项。

对于Django开发者来说,熟悉on_delete属性的使用是非常重要的。它可以帮助开发者处理模型实例之间的关系,确保数据的完整性和一致性。

腾讯云提供了云服务器、云数据库、云存储等一系列云计算产品,可以满足各种应用场景的需求。具体关于腾讯云的产品介绍和相关链接地址,请参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 学习笔记之模型高级用法(

而细节用法往往体现在一些差别用法,难以理解知识点。 1 复杂字段类型 经过前面的学习,我们知道模型字段类型一方面是指定数据库表列名称和数据类型,另一方面决定 HTML 中表单标签类型。...所以 on_delete 参数是 Django 模拟 SQL 约束行为。 on_delete 有几个可选值: CASCADE:这就是默认选项,级联删除,你无需显性指定它。...PROTECT: 保护模式,如果采用该选项,删除时候,会抛出 ProtectedError 错误。...4) related_name 用于关联对象反向引用模型名称。主要用于反向查询,即外键源模型实例通过管理器返回第一个模型所有实例。...用于从目标模型反向过滤模型对象名称。

2K30
  • django 模型计算字段实例

    self.given_name) admin.py class PersonAdmin(admin.ModelAdmin): def name(self,obj): # 这个方法会得到两个参数,第一个是类本身一个实例...(app.PersonAdmin),第二个是这个类管理模型实例(Person) return '%s,%s' % (self.family_name, self.given_name)...(Person, PersonAdmin) 补充知识:django如何在 search_fields 中包含外键字段 在search_fields中加入一个外键名字是不能查询,要写成(外键名__外键中字段名...)形式. search_fields = ('attributename','goodsclass__cn') # goodsclass__cn 就可以搜索外键名字中有搜索词条目了, # 比如搜索手机分辨率...,而不是电脑分辨率,就可以搜索'手机 分辨率' 以上这篇django 模型计算字段实例就是小编分享给大家全部内容了,希望能给大家一个参考。

    4.4K20

    基于Django OneToOneField和ForeignKey区别详解

    模型(Models)是对网站所需信息种类定义,其包含了网站存储数据中重要字段和数据行为。...一般来说,一个模型对于数据库中一个表单。 字段(Fields)是模型重要和唯一组成部分,他们由类别的属性值所指定。...对于每个ForeignKey,我们需要给出关联模型on_delete响应选项,即 manufacturer = models.ForeignKey( 'Manufacturer', on_delete...,再删除此字段信息时候同时删除包含ForeignKey字段目标(object) PROTECT 通过django.db.IntegrityError中ProtectedError来保护此字段不被删除...在概念我们可以理解其为设置unique属性为True一种类型,区别之处在于它“反向数值会返回一个目标值,这对于继承关系表达十分有用,例如一下示例程序: from django.conf import

    2.4K20

    【云+社区年度正文】Django从入门到精通No.2----模型

    django从入门到精通No.2----模型 一、前言 学过orm系统自然之道模型重要性,很多web站点都需要与数据库交互,这个时候模型设计就显得尤为重要,一个好模型会使得项目方便管理并且易于维护...,比如我们学过flask,里面的sqlalchemy就是这样一个优秀模块,通过它可以快速和数据库建立通道,从而使得web编程更为高效,本文主要讲解django模型。...二、模型定义 模型可以定义储存数据字段和值,比如我们在进行表单提交时候,一些注册信息就可以利用模型来进行管理,然后统一提交到数据库中。简单来说,模型是与数据库有关操作集合。...三、模型字段和约束 这里我们需要在he文件夹中找到models.py文件,然后我们试着改动一下这个文件内容,如下: from django.db import models ​ # Create your...六、总结 以上就是django所有的关于模型概念了,接下来小编将通过与数据库交互来带着大家一起操作表。

    2.1K00

    Django关系映射

    =models.CASCADE) # 一对一即users_id 对应 id 一对一映射(创建数据) ---- 无外键约束模型类UserMit # 进入Django Shell操作 create1 =...UserMit.objects.create(name="henan) 有外键约束模型类UserId create2 = UserId.objects.create(name="henan",users...>>> a2.id 6 >>> a2.users_id UUID('43ff679f-42b2-4334-85a0-b493503d6433') 反向查询 没有外键属性一方,可以调用反向属性查询到关联另一方...反向关联属性为实例对象.引用类名(小写) 当反向引用不存在时候,则会触发异常 当UserId类中定义了外键约束,则UserMit类中会有一个UserId反向属性 class...) 多对多映射 ---- 多对多表达对象之间多对多复杂关系,如:每个人都有不同学校,每个学校都有不同学生 MySQL中创建多对多需要以来第三张表来完成 Django中无需手动创建,Django

    1.7K20

    Django(15)外键和表关系

    大家好,又见面了,我是你们朋友全栈君。 外键删除操作 如果一个模型使用了外键。那么在对方那个模型被删掉后,该进行什么样操作。可以通过on_delete来指定。...可以指定类型如下: CASCADE:级联操作。如果外键对应那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键那条数据,那么就不能删除外键那条数据。...如果外键那条数据被删除了,那么本条数据就将这个字段设置为默认值。如果设置这个选项,前提是要指定这个字段一个默认值。 SET():如果外键那条数据被删除了。...这个OneToOneField其实本质就是一个外键,只不过这个外键有一个唯一约束(unique key),来实现一对一。 以后如果想要反向引用,那么是通过引用模型名字转换为小写形式进行访问。...related_name="articles") class Tag(models.Model): name = models.CharField(max_length=50) 在数据库层面,实际Django

    2.1K40

    Django Model中字段(field)各种选项说明

    import timezone auto_now = True # 对于一次修改日期(last_modifiel date),可以设置 EmailField() 邮件字段 unique = True...,**options) 一对多关系 to # 必须指向其他模型 on_delete = models.CASCADE or models.SET_NULL # on_delete指定删除选项 “default...ManyToManyField(to,**options) 多对多关系 to # 必须只想其他模型 symmetrical = False # 如果多对多关系不是对称,可以设置 through = ‘...intermediary model # 如果需要建立中间模型来搜集更多信息,可以设置 related_name = xxx # 便于反向查询 补充知识:django 使用annotate定义字段后排序翻页重复问题...Model中字段(field)各种选项说明就是小编分享给大家全部内容了,希望能给大家一个参考。

    1.8K30

    Django ForeignKey与数据库FOREIGN KEY约束详解

    Django ForeignKey 是一种逻辑两个表关联关系,可以指定是否使用数据库 FOREIGN KEY 约束。...on_delete 参数默认为 on_delete=models.CASCADE,表示使用数据库级联删除,使用 on_delete=models.SET_NULL 可以使删除 Province 时将关联...City 表对应 province_id 值设为 NULL 使用这种方式不会破坏 Django 反向关联查询,以下查询仍然会返回正确结果: Province.objects.filter(cities...`name` = xxx; 补充知识:关于Django模型中中定义auto_now=True 数据库中时间并没有自动更新 djangoorm关于更新数据库方法有update和save两种方法...前提在模型中设置了auto_now=True时间戳属性,为了方便数据库自动更新时间,而 使用update更新记录,数据库中并没有自动更新,达到我需求。

    2.6K10

    Django ORM模型:想说爱你不容易

    不过,DjangoORM模型有自己一套语法,有时候会觉得别扭。这里聊一下我自己体会。 模型设计 这一部分算处理得比较好部分。...有一些限制条件是Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 在基本模型设计Django ORM没有留什么坑。...需要注意是,在Django ORM中,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...比如说: company.customer_set #company是一个Company实例 就可以根据一对多关系,调到该公司下所有客户。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

    78320

    Django ORM模型:想说爱你不容易

    使用PythonDjango模型的话,一般都会用它自带ORM(Object-relational mapping)模型。这个ORM模型设计比较简单,学起来不会特别花时间。...有一些限制条件是Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 在基本模型设计Django ORM没有留什么坑。...需要注意是,在Django ORM中,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...比如说: company.customer_set #company是一个Company实例 就可以根据一对多关系,调到该公司下所有客户。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

    1.3K80

    Django ORM模型:想说爱你不容易

    不过,DjangoORM模型有自己一套语法,有时候会觉得别扭。这里聊一下我自己体会。 模型设计 这一部分算处理得比较好部分。...有一些限制条件是Django提供,并没有数据库层面的对应物,比如blank。 (当blank参数为真时,对应字段可以为留为空白。) 在基本模型设计Django ORM没有留什么坑。...需要注意是,在Django ORM中,只能通过ForeignKey来定义多对一关系,不能显示地定义一对多关系。但你可以使用模型对象*_set语法来反向调用多对一关系。...比如说: company.customer_set #company是一个Company实例 就可以根据一对多关系,调到该公司下所有客户。...此外,多对多关系也可以用类似的方式反向调用,比如: group.customer_set 此外,你还可以在模型中加入related_name参数,从而在反省调用时,改用"*_set"之外其他名称,比如

    63620

    Mysql数据库反向生成Django里面的models指令方式

    模型映射关系 一、前言 我数据库已经用MySQL Workbench设计好了,也插入了一些测试数据,现在开始在Django中设计models模型。...二、设计models模型 1. 如果数据库中表数量比较多,可以先导出,然后查看对应表字段,根据不同表设计不同models类,根据同一张表不同字段设计类属性。...注意,刚开始,我数据库中把 time_credits_buy 字段设置为varchar(64)类型,而models模型中设置为时间类型,两边类型不一致出现bug,如下图所示: ?...特别注意,数据库中字段类型,一定要和models定义类属性类型一致,否则报错,有的时候很难发现bug 三、Django自动生成models python manage.py inspectdb...app/models.py 如果数据库表已经存在,执行命令,可以自动生成Models模型,实现models与数据表映射 以上这篇Mysql数据库反向生成Django里面的models指令方式就是小编分享给大家全部内容了

    1.3K20

    django 外键引用自身和on_delete参数

    模型使用外键引用自己本身。...如果外键对应那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键那条数据,那么就不能删除外键那条数据。如果我们强行删除,Django就会报错。...如果外键那条数据被删除了,那么在本条数据就将这个字段设置为空。如果设置这个选项,前提是要指定这个字段可以为空。 SET_DEFAULT:设置默认值。...如果外键那条数据被删除了,那么本条数据就将这个字段设置为默认值。如果设置这个选项,== 前提是要指定这个字段一个默认值 ==。 SET():如果外键那条数据被删除了。...比如 djangoon_delete=CASCADE, 但是数据库外键约束是RESTRICT.

    1.3K20

    Django】 开发:数据库操作和后台管理

    list_editable 设置为模型字段名称列表,这将允许在更改列表页面上进行编辑。...', wife.author.name) 反向查询 通过反向关联属性查询 反向关联属性为实例对象.引用类名(小写),如作家反向引用为作家对象.wife 当反向引用不存在时,则会触发异常 # 通过 author.wife...class B(model.Model): 属性 = models.ForeignKey("一"模型类, on_delete=xx) 2.用法示例 有二个出版社对应五本书情况....:', abook.publisher.name) 通过 Publisher 查询 对应所有的 Book 【反向Django会在Publisher中增加一个属性来表示对对应Book们查询引用...80岁作者信息 通过 Author 查询对应所有的 Book【反向Django 会生成一个反向属性 book_set 用于表示对对应 book 查询对象相关操作 author.book_set.all

    4K40
    领券