django2.X 模型类兼容 外键关联on_delete


模型类引入外键的时候需要添加

on_delete=models.CASCADE

例:
以往版本:

name = models.ForeignKey('Name')
type = models.ForeignKey('Type',verbose_name='类别')

需改为:

name = models.ForeignKey('Name',on_delete=models.CASCADE)
type = models.ForeignKey('Type',on_delete=models.CASCADE,verbose_name='类别')

 

不然报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'

 


on_delete作用:  如果外键所关联的对应数据表被删除的话, 此模型类数据的应对方式.

在django2.X之前版本, on_delete(default='CASCADE'), CASCADE是缺省值, 更新之后需要进行手动设置.




一般依然选CASCADE.

on_delete有六种选项, 除了CASCADE外, 还有PROTECT、SET()、SET_NULL、SET_DEFAULT、DO_NOTHING


on_delete属性详解:

CASCADE(级联删除):当关联表中的数据删除时,该外键字段也随之删除

PROTECT(保护模式): 如果采用该选项,删除的时候,会抛出ProtectedError错误

SET(): 自定义一个值,对应实体

SET_NULL(置空):当关联表中的数据删除时,该外键置空,当然,此外键字段得允许为空,null=True

SET_DEFAULT(设置默认值):删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值

DO_NOTHING: 啥也不干

转载于:https://www.cnblogs.com/jrri/p/11605015.html

Django 中,外键字段的 `on_delete` 属性用于指定当关联的对象被删除时的行为。它是必需的,因为它决定了当关联的对象被删除时,包含该外键的对象应该如何处理。 `on_delete` 属性可以设置以下几种选项: - `models.CASCADE`:级联删除。当关联的对象被删除时,包含该外键的对象也会被删除。 - `models.PROTECT`:保护约束。当关联的对象被删除时,会引发 `ProtectedError` 异常,阻止删除操作。 - `models.SET_NULL`:设置为 NULL。当关联的对象被删除时,外键字段会被设置为 `NULL`(仅适用于可为空的外键字段)。 - `models.SET_DEFAULT`:设置为默认值。当关联的对象被删除时,外键字段会被设置为其默认值(仅适用于有默认值的外键字段)。 - `models.SET()`:设置为指定值。当关联的对象被删除时,外键字段会被设置为指定的值,该值可以是一个对象或一个可调用对象。 - `models.SET_CONSTRAINT`:设置为约束。当关联的对象被删除时,会引发 `django.db.IntegrityError` 异常,阻止删除操作。 - `models.DO_NOTHING`:不采取任何行动。当关联的对象被删除时,什么都不会发生。 下面是一个示例,演示了如何在 Django 模型中使用外键字段和 `on_delete` 属性: ```python from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE) ``` 在上述示例中,`Book` 模型包含一个外键字段 `author`,它与 `Author` 模型建立了关联。`on_delete=models.CASCADE` 指定了级联删除的行为,即当关联的 `Author` 对象被删除时,相关的 `Book` 对象也会被删除。 根据需求,你可以选择适当的 `on_delete` 行为来处理外键关联对象的删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值