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

on_delete=models.PROTECT在Django中不起作用

在Django中,on_delete=models.PROTECT是一个参数,用于定义模型之间的关联关系,并指定在关联对象被删除时的行为。然而,如果在使用on_delete=models.PROTECT时发现它不起作用,可能是由于以下几个原因:

  1. 未正确设置外键关联:on_delete=models.PROTECT只能在ForeignKey字段中使用。确保在定义模型之间的关联关系时,将on_delete参数设置为models.PROTECT,并将其应用于ForeignKey字段。
  2. 未执行数据库迁移:在修改模型的关联关系后,需要执行数据库迁移命令以应用更改。确保在修改模型后运行以下命令:python manage.py makemigrations和python manage.py migrate。
  3. 使用了旧版本的Django:on_delete=models.PROTECT是在Django 2.0及更高版本中引入的。如果您正在使用旧版本的Django,该参数可能不会起作用。请确保您的Django版本符合要求,并考虑升级到最新版本。

总结起来,要确保on_delete=models.PROTECT在Django中起作用,需要正确设置外键关联、执行数据库迁移,并使用Django 2.0及更高版本。这样,当关联对象被删除时,将会保护相关的对象不被删除。

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

相关·内容

博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法

但是,秉着向新技术看齐的态度,我还是花了些时间(大概半天)把博客依赖的 Django 升级到当前最新版的 Django 2.2.6 版本了,升级的过程也遇到了很多问题,这些问题也是之前考虑到的,所以基本都迎刃而解了...,安装所有依赖的最新版本,这样就可以做到使用 django2.0 的时候其他依赖组件也能支持 django。...因为 Django 1.x 的版本,这个参数是有默认值的,但是 Django 2.x 没有指定,所以需要显示设定一个值。...,什么也不做 on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError on_delete=models.SET_NULL, # 删除关联数据...=models.PROTECT) # 当删除有文章的作者时引发错误 category = models.ForeignKey(Category, verbose_name='文章分类', on_delete

92720

Django——模型Model

ORM简介 对象关系映射(Object Relation Mapping)实现了关系和数据库之间的映射,隐藏了关系数据访问的细节,不需要再编写SQL语句 创建模型 models.py的文件创建类 继承...('pub_date', models.DateField()), ], ), ] 2执行迁移:根据第一步生成的迁移文件在数据库创建表...=models.DO_NOTHING) django 升级到2.0之后,表与表之间关联的时候,必须要写on_delete参数,否则会报异常: TypeError: init() missing 1 required...positional argument: 'on_delete' on_delete参数的各个值的含义: on_delete=None, # 删除关联表的数据时,当前表与其关联的...on_delete=models.PROTECT, # 删除关联数据,引发错误ProtectedError # models.ForeignKey('关联表', on_delete=models.SET_NULL

70350

Django官方文档小结(一) -- Models模型

Django 关系字段 本文主要内容是关于Django框架models的知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...一对多 : fk字段"多"的models定义 from django.db import models class Blog(models.Model): name = models.CharField...=models.CASCADE) #2.3 关联关系 on_delete=None, # 删除关联表的数据时,当前表与其关联的field的行为 on_delete=models.CASCADE..., # 删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做 on_delete=models.PROTECT, # 删除关联数据...models.Blog.objects.get(id=1) # obj.get_小写关联的表名_order() b.get_entry_order() #3.3 联合唯一 (unique_together) 给定的字段,加起来表中保持唯一值

75920

Django——图书管理系统(六)

当然我依旧会在注释做出一些解释。 现在我们已经有了出版社这张表,现在我们添加书籍这张表。由于出版社和书籍之间是有关系的,我们使用外键来连接两者之间的关系。...models.py的内容如下: from django.db import models # Create your models here. """ 书和出版社之间是有关系的。...""" class Publisher(models.Model): """ Django的models会默认在数据库创建主键 """ name = models.CharField...第二个参数on_deleteDjango2.0之后必须填写,models.CASCADE表示级联删除。级联删除意味着,我删除了某个出版社,那么该出版社对应的所有书籍也被删除。...models.PROTECT:保护,如果某个出版社还有书籍存在,那么就不允许删除该出版社。

54440

Django的AutoField字段使用

Django是一个机智的框架】 默认情况下Djang会为ORM定义的每一张表加上一个自增ID列,并且用这个列来做主键;出于一个MySQL-DBA的工作经历我觉得 Djanog还真是机智;这样么说主要是因为我遇到过许多主从延时的问题...补充知识:Djangomodels下常用Field以及字段参数 一、常见的FieldType数据库字段类型 1、AutoField:自增Field域,自动增加的一个数据库字段类型,例如id字段就可以使用该数据类型...:当删除关联表的数据时,当前表与其关联的行的行为,例如删除一个出版社,那么和这个出版社有关联的书籍也都被删除掉了,下面介绍on_delete的参数值: on_delete=models.CASCADE...:删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING:删除关联数据,引发错误IntegrityError on_delete=models.PROTECT:删除关联数据...,引发错误ProtectedError on_delete=models.SET_NULL:删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空) on_delete=models.SET_DEFAULT

6.4K20

Django 2.2文档系列】Model 外键on_delete参数用法

场景 我们用Django的Model时,有时候需要关联外键。关联外键时,参数:on_delete的几个配置选项到底是干嘛的呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束的行为,删除此条数据时,同事删除外键关联的对象。...” models.PROTECT 防止删除引用的对象。与上个恰恰相反,是防止关联数据被删除。 models.SET_NULL 设置关联的外键内容为null。只有设置了null=True时可用。...如果后端数据库有强制关联操作,这是容易报错:IntegrityError,除非你在数据库手动添加了SQL的ON DELETE约束。...欢迎查看我的这个系列的其他文章: django-admin和manage.py的用法[1] 编写自定义manage.py 命令[2] Django组件——forms组件[3] 还有更多内容,请查看Bigyoung

1.9K10

Django model 层之Models与Mysql数据库小结

null 是针对数据库而言,如果 null=True, 表示数据库的该字段可以为空,那么新建一个model对象的时候是不会报错的!!...,将被存储在数据库,第二个元素用于默认表单组件展示 例: from django.db import models class Person(models.Model): SHIRT_SIZES...class Album(models.Model): artist = models.ForeignKey(Musician, to_field='auto_id', on_delete=models.PROTECT...删除被参照表的某条表记录,同时级联删除参照表,同待删除记录存在外键关联关系的记录。 PROTECT 删除被参照表的某条表记录,如果参照表,存在与该记录有外键关系的记录,则不让删除。...新建models包来管理,具体方法如下: 然后移除models.py,并创建一个myapp/models目录,该目录下新建__init__.py文件,用于存放models。

2.2K20

Django的关系映射

关系型数据库,通常不会把所有数据都放在同一张表,不易于扩展。...models.PROTECT:抛出ProtectedError以阻止被引用对象的删除 SET_NULL:设置ForeignKey为Null,需要指定null=True from django.db import...一对多需要明确出具体角色,多表上设置外键 语法:当一个A类对象可以关联多个B类对象 class ClassRoom(models.Model): # 班级唯一 name = models.CharField...Django无需手动创建,Django自动完成 语法:关联的两个类的任意一个类models.ManyToManyField(MyModel) 张老师和王老师同时带领高二三班,李老师和王老师都都参与过高三班的课...TeacherName",max_length=20,default="") name = models.ManyToManyField(ClassRoom) 多对多(创建数据) 方案1:先创建班级,关联老师

1.7K20

【愚公系列】2022年02月 Django商城项目 31-订单模型数据库设计

模型类设计 总结 1.订单表 2.订单发票表 3.订单物流表 4.订单退货表 5.订单商品详情表 6.收货地址表 7.购物车表 一、订单模型数据库设计 1.数据库设计ER图 2.模型类设计 from django.db...=models.PROTECT, verbose_name="下单用户") address = models.ForeignKey(Address, on_delete=models.PROTECT...=models.CASCADE, verbose_name="订单") sku = models.ForeignKey(SKU, on_delete=models.PROTECT, verbose_name...verbose_name_plural = verbose_name def __str__(self): return self.sku.name 总结 实际订单设计远不止这些...自增长主键) – 订单单号(order_no, 唯一值,供客户查询) – 商店编号(shop_id, 商店表自动编号) – 订单状态 (order_status,未付款,已付款,已发货,已签收,退货申请,退货,

73630

Django 2.x实战(02) - 深入模型

'USER': 'root', 'PASSWORD': '123456', } } # 此处省略下面的代码 配置ENGINE属性时,常用的可选值包括: 'django.db.backends.sqlite3...'django.db.backends.oracle':甲骨文公司的旗舰关系型数据库产品 其他的配置可以参考官方文档数据库配置的部分。...=models.PROTECT, verbose_name='所在部门') class Meta: db_table = 'tb_emp' 说明:上面定义模型时使用了字段类及其属性...字段属性primary_key用于设置主键,max_length用来设置字段的最大长度,db_column用来设置数据库与字段对应的列,verbose_name则设置了Django后台管理系统该字段显示的名称...OK 执行完数据迁移操作之后,可以通过图形化的MySQL客户端工具查看到E-R图(实体关系图)。

44430

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

二、模型的定义 模型可以定义储存数据的字段和值,比如我们进行表单提交的时候,一些注册信息就可以利用模型来进行管理,然后统一提交到数据库。简单来说,模型是与数据库有关的操作集合。...on_delete=None # 当删除关联表的数据时,当前表与其关联的行的行为 - models.CASCADE,删除关联数据,与之关联也删除...- models.DO_NOTHING,删除关联数据,引发错误IntegrityError - models.PROTECT...# Admin是否显示关联数据 2.多对多 多对多的表,必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键。...on_delete=None # 当删除关联表的数据时,当前表与其关联的行的行为 五、管理员登陆 为了能让大家提前看到django的数据操作,django内置了一款非常到位的系统管理员登陆设计系统

2.1K00

django自定义非主键自增字段类型详解(auto increment field)

多对多:某表创建一行数据是,有一个可以多选的下拉框 例如:创建用户信息,需要为用户指定多个爱好 一对一:某表创建一行数据时,有一个单选的下拉框(下拉框的内容被用过一次就消失了 例如:原有含10...on_delete=None, # 当删除关联表的数据时,当前表与其关联的行的行为 - models.CASCADE,删除关联数据,与之关联也删除 - models.DO_NOTHING,删除关联数据...,引发错误IntegrityError - models.PROTECT,删除关联数据,引发错误ProtectedError - models.SET_NULL,删除关联数据,与之关联的值设置为null...parent_link=False # Admin是否显示关联数据 OneToOneField(ForeignKey) to, # 要进行关联的表名 to_field=None # 要关联的表的字段名称...on_delete=None, # 当删除关联表的数据时,当前表与其关联的行的行为 ###### 对于一对一 ###### # 1.

2.2K10

测试开发进阶(二十二)

projects/models.py编写 from django.db import models class Person(models.Model): """ 创建Person...修改数据表名称 Projects类添加 db_table表名 verbose_name:admin站点中人性化展示 verbose_name_plural:复数显示(对照英文单词后面+s) class...为了让他显示的更人性化 projects.models.Projects添加: def __str__(self): return self.name ?...修改展示的部分 fields 指定在修改「新增」需要显示的字段 list_display 指定要列出的字段 from django.contrib import admin from .models...', ] interfaces/models.py编写 *一个项目中有多个接口 那么需要在「多」的一侧创建外键 * 项目表为父表「一」,接口表为「多」子表 class Interfaces(models.Model

63730
领券