首页
学习
活动
专区
工具
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

98320
  • 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

    72950

    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) 给定的字段,加起来在表中保持唯一值

    78320

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

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

    58240

    【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

    2K10

    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,未付款,已付款,已发货,已签收,退货申请,退货中,

    79730

    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图(实体关系图)。

    45830

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

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

    2.1K00

    测试开发进阶(二十二)

    在 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

    66130

    django 源码改写笔记

    一、admin 的 save_model 改写 我们后台项目有用到 django的 admin 后台模块,有些配置的功能完全可以通过 django 就可以实现,不用前端再开发管理页面了,但是有些操作需要自定义的...保存配置后需要调取微信端的接口更新对应的配置,admin暴露出来的接口只是将数据保存到数据库功能,实现保存后调取微信 api 接口就要改写 admin 的源码 save_mode 方法了,代码如下: from django.contrib...admin.site.register(QrCode, QrCodeAdmin) # 将模型注册到 admin 下图中点击保存时,admin 会调用上面的 save_model法,代码中添加了注释...is_default_wx=False) class Customer(models.Model, CustomerMixin): user = models.OneToOneField(BaseUser, on_delete...=models.PROTECT, related_name="customer", null=True) is_default_wx = models.BooleanField(verbose_name

    52020

    用人话讲解django之数据的增删改

    在 web 开发中,最重要的是数据库的设计,就是 models 模型设计,简单的web开发说白了就是对数据库的增删改查,今天先看下数据库的增加,修改,和删除吧,我们操作数据库可以使用原生sql语句,但是如果...一个班级表,代码如下: class Student(models.Model): # 一定要继承 # CharField为字符串类型,必须有max_length设置最大长度,verbose_name在django...的orm反向查询中 cls = models.ForeignKey('Class', related_name="stu_cls", null=True, on_delete=models.PROTECT...pycharm 中打开终端(Terminal),在命令行中输入: ?...下面在一个 views.py 文件中写一个视图函数,使用 ORM 进行基本的增删改操作。记得给函数配置对应的 url。

    42030
    领券