ForeignKey.on_delete

当由一个 ForeignKey 引用的对象被删除,默认情况下,Django模拟SQL的 ON DELETE CASCADE 来删除对象的 ForeignKey 关系。这样可以覆盖指定的 on_delete 参数。比如,你有一个可为空的 ForeignKey ,你想他引用的对象被删除时,该项为空。

user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)

django.db.models 中的 on_delete 存在以下设置值:

CASCADE

级联删除默认值。

PROTECT

阻止删除 django.db.IntegrityError 的子类 ProtectedError 引用的对象。

SET_NULL

设置 ForeignKey 为空。只有 null 为 True 时才可设置。

SET_DEFAULT

设置 ForeignKey 的默认值,而且必须得设置。

SET()

设置 ForeignKey 的值传递给 SET() ,并允许可调用的对象调用它。大多数情况下通过调用是必要的,这样可以避免执行查询时models.py被导入。

def get_sentinel_user():
    return User.objects.get_or_create(username=‘deleted‘)[0]

class MyModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET(get_sentinel_user))

DO_NOTHING

不采取任何行动。如果你的数据库后端强制引用完整性,这将导致 IntegrityError 错误,除非手动添加SQL数据库中的 ON DELETE  字段进行约束。

时间: 2024-08-07 04:31:03

ForeignKey.on_delete的相关文章

Django之模型的创建

在web应用中,经常涉及到和数据库的的交互,比如我们在京东上买一个东西,查询的时候网站会自动转到后端数据库去查询,然后呈现在网页上 Django 里更关注的是模型(Model).模板(Template)和视图(Views),Django 也被称为 MTV 框架 .在 MTV 开发模式中: M 代表模型(Model),即数据存取层. 该层处理与数据相关的所有事务: 如何存取.如何验证有效性.包含哪些行为以及数据之间的关系等. T 代表模板(Template),即表现层. 该层处理与表现相关的决定:

Django:创建用户模型报错: (admin.E108) The value of 'list_display[4]'解决方案

参考资料:虫师-<web接口开发与自动化测试:基于python语言> 日常学习Django框架中,创建了用户模型,但是页面功能验证时候,提示不能进行列表字段操作,debug好久,才找到问题原因,心累... 下面是大概过程和解决方案... models.py文件代码: 1 from django.db import models 2 3 # Create your models here. 4 # 发布会表 5 class Event(models.Model): 6 name = models

Django项目部署-01

1. 安装Python 下载链接:https://www.python.org/getit/ 我这边下载的是3.6.5的版本的执行版本,安装过程中选择自动安装pip 2.安装django pip install Django==1.11 3.创建项目 django-admin startproject project 4.创建一个应用 先进入到创建的项目目录下,然后执行 python manage.py startapp myApp 目录结构如下: django默认使用的数据库为sqlite3数

python django中的orm外键级联删除

今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: 在网上查了一下资料,问题主要是django orm的field字段有关: routemgr = models.ForeignKey('Routemgr',default=1,blank=True,null=True,on_delete=models.SET_NULL) 主要意思就是把Routemg

001.Django_Model.整理

Django001_Model.整理 Model表设计 数据定义数据存储,输出 a.定义表(信息 =字段) + 定义表关系 + (定义/限制)数据 b.通过orm等方法来,定义method来编辑原始数量来输出 __str__ 1.表设计 数据库表的属性 主键 unique_key 默认值(default) null/blank max_length django admin的属性 verbose_name help_text 2.表关系 foreignkey on_delete manytoma

跟大佬学django-编写博客的数据模型类

编写博客的数据模型类 设计数据库和表结构是做网站的基础.在django中,我们不需要通过SQL语句直接跟数据库打交道,而是完全用python的方式创建数据库模型,之后交给django完成数据库的操作. 数据库模型类 利用django开发网站系统,一般情况下,要先编写数据模型,就是在./blog/models.py中写一个类,这个类与数据库中的数据表具有对应关系. 下面就在./blog/models.py中编写博客的数据模型类Blog,本质上它是一个继承了django.db.models.Mode

055.Python前端Django模型ORM多表基本操作

一 准备工作 1.1 新建一个项目 [email protected]:~# cd /root/PycharmProjects/ [email protected]:~/PycharmProjects# django-admin startproject orm_demo [email protected]:~/PycharmProjects# ll drwxr-xr-x 7 root root 4096 4月 5 20:04 mysite/ drwxr-xr-x 3 root root 409

ForeignKey 的第二个位置参数on_delete

on_delete指的是通过ForeignKey连接起来的对象被删除后,当前字段怎么变化. 常见的选项有: models.CASCADE,对就对象删除后,包含ForeignKey的字段也会被删除 models.PROTECT,删除时会引起ProtectedError models.SET_NULL,注意只有当当前字段设置null设置为True才有效,此情况会将ForeignKey字段设置为null models.SET_DEFAULT ,同样,当前字段设置了default才有效,此情况会将For

【python3】 django2.0 在生成数据库表时报错: TypeError: __init__() missing 1 required positional argument: &#39;on_delete&#39;

python: 3.6.4 django: 2.0 models.py 代码如下 # coding: utf-8 from django.db import models from django.contrib.auth.models import User # Create your models here. class Category(models.Model): name = models.CharField(max_length=100) class Tag(models.Model)