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

Django simple_history“缺少1个必需的位置参数:'on_delete'”

Django simple_history是一个Django扩展库,用于实现数据库中的历史记录跟踪和版本控制。它可以记录模型对象的变化历史,并且提供了简单且易于使用的接口和工具来查询和比较不同版本的对象。

在使用Django simple_history时,如果出现“缺少1个必需的位置参数:'on_delete'”的错误,这通常是由于模型中的外键字段的on_delete参数未被正确设置引起的。在Django 2.0及以上版本中,外键字段必须设置on_delete参数,该参数指定了当关联的对象被删除时,数据库应该如何处理相应的外键关系。

解决这个错误的方法是在定义模型中的外键字段时,为on_delete参数设置适当的值。常见的on_delete选项包括:

  • CASCADE:级联删除,即当关联的对象被删除时,同时删除包含该外键的对象。
  • PROTECT:保护模式,即当关联的对象被删除时,抛出ProtectedError异常,阻止删除操作。
  • SET_NULL:设置为NULL,即当关联的对象被删除时,将外键字段设置为NULL。
  • SET_DEFAULT:设置为默认值,即当关联的对象被删除时,将外键字段设置为默认值。
  • SET():设置为指定值,即当关联的对象被删除时,将外键字段设置为指定的值。
  • DO_NOTHING:什么都不做,即当关联的对象被删除时,什么都不处理。

以下是一个示例模型定义,演示了如何正确设置on_delete参数:

代码语言:txt
复制
from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)

class Author(models.Model):
    name = models.CharField(max_length=100)
    book = models.ForeignKey(Book, on_delete=models.CASCADE)

在上述示例中,当一个Book对象被删除时,与之关联的Author对象也会被级联删除。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云数据库(TencentDB):https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能(AI):https://cloud.tencent.com/product/ai
  • 腾讯云物联网(IoT):https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发(Mobile):https://cloud.tencent.com/product/mobile
  • 腾讯云区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙(Metaverse):https://cloud.tencent.com/product/mgsvr
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

场景 我们用DjangoModel时,有时候需要关联外键。关联外键时,参数:on_delete几个配置选项到底是干嘛呢,你知道吗? 参数介绍 models.CASCADE 级联删除。...Django会模拟SQL约束行为,在删除此条数据时,同事删除外键关联对象。...比如:用户有一个外键关联是用户健康记录表,当用户删除时,配置了这个参数健康记录表中跟这个用户有关数据也会被删除。...提醒:级联删除不会调用model级行为,但是会为所有已删除对象发送pre_delete和 post_delete信号,有用Django信号机制场景,要考虑这个级联删除带来影响。...欢迎查看我这个系列其他文章: django-admin和manage.py用法[1] 编写自定义manage.py 命令[2] Django组件——forms组件[3] 还有更多内容,请查看Bigyoung

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

    gohlke/pythonlibs/#mysqlclient 如果是 linux 系统,也可能出现问题,大概是缺少 MySQL 依赖,这个需要根据具体系统版本去网上搜索依赖自行试试。...pymysql pymysql.install_as_MySQLdb() 关于 on_delete 参数报错 报错现象 class Article(models.Model): File...' 报错原因其实一看就能知道,这个地方是说关于一些模型在一对一关联和一对多关联(外键)时候需要指定 on_delete 参数才行,多对多没有这个设置。...因为在 Django 1.x 版本中,这个参数是有默认值,但是 Django 2.x 没有指定,所以需要显示设定一个值。...报错分析,这个是 django 2.x 里面会出现问题,当 urls.py 里面使用 include 时候,当有 namespace 参数时候,第一个参数需要添加成元组,其中第二个参数是 app_name

    96820

    探索 PythonDjango 支持分布式多租户数据库,如 Postgres+Citus

    在 Citus 中分发数据 将 Django 应用程序更新为范围查询 使用中间件自动化 更多 在 确定分布策略 中,我们讨论了在多租户用例中使用 Citus 所需与框架无关数据库更改。...将租户列介绍给我们想要分发缺少模型 更改分布式表主键以包含租户列 更新模型以使用 TenantModelMixin 分发数据 将 Django 应用程序更新为范围查询 准备横向扩展多租户应用程序...为了能够扩展 django,必须对模型进行一些简单更改。...最后你模型应该是这样: from django.db import models from django_multitenant.fields import TenantForeignKey from...有关更多示例,请参阅 django-multitenant 中 README。

    2.1K10

    django数据库迁移时候异常

    django数据库迁移时候异常 一.错误信息 Django在根据models生成数据库表时报 init() missing 1 required positional argument: 'on_delete...' 二.原因 在django2.0后,定义外键和一对一关系时候需要加on_delete选项,此参数为了避免两个表里数据不一致问题,不然会报错: TypeError: init() missing...=models.ForeignKey(UserProfile) 需要改成: user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数...(models.CASCADE)是默认值 owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE...)是默认值 参数说明: on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择值 CASCADE:此值设置,是级联删除。

    49820

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

    默认最大长度为 100,当可通过 max_length 参数自定义。它包含几个重要参数: path:必传参数。记录目录或者文件绝对路径。...2.1 ForeignKey 1) on_deleteDjango 2.0 中,设置外键时需要添加一个 on_delete选项。外键本身涉及到两个表数据,况且外键在数据库中是有约束行为。...所以 on_delete 参数Django 模拟 SQL 约束行为。 on_delete 有几个可选值: CASCADE:这就是默认选项,级联删除,你无需显性指定它。...2)limit_choices_to 该参数用于限制外键所能关联对象,只能用于 Django ModelForm(Django表单模块)和 admin 后台,对其它场合无限制功能。...对于每一个字段类型,除了 ForeignKey、ManyToManyField和 OneToOneField 这三个特殊关系类型,其第一可选位置参数都是 verbose_name。

    2K30

    DjangoAutoField字段使用

    如果当前网站用Django开发,我想就不会有这种事情发生了吧。...补充知识:Django中models下常用Field以及字段参数 一、常见FieldType数据库字段类型 1、AutoField:自增Field域,自动增加一个数据库字段类型,例如id字段就可以使用该数据类型...Django Admin以及ModelForm中提供验证机制 11、FileField:存储文件类型数据,文件上传到指定目录 –参数:upload_to=”….”...表名_set” 4、on_delete:当删除关联表中数据时,当前表与其关联行为,例如删除一个出版社,那么和这个出版社有关联书籍也都被删除掉了,下面介绍on_delete参数值: on_delete...:删除关联数据,引发错误ProtectedError on_delete=models.SET_NULL:删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空) on_delete=models.SET_DEFAULT

    6.5K20

    Django——模型Model

    OK Django默认采用sqlite3数据库,最终会生成如下数据表,其中自定义表命名规则是(应用名称模型类名) DATABASES = { 'default...=models.DO_NOTHING) django 升级到2.0之后,表与表之间关联时候,必须要写on_delete参数,否则会报异常: TypeError: init() missing 1 required...positional argument: 'on_delete' on_delete参数各个值含义: on_delete=None, # 删除关联表中数据时,当前表与其关联...field行为 on_delete=models.CASCADE, # 删除关联数据,与之关联也删除 on_delete=models.DO_NOTHING, # 删除关联数据,什么也不做..., blank=True, null=True) on_delete=models.SET_NULL, # 删除关联数据,与之关联值设置为null(前提FK字段需要设置为可空,一对一同理) #

    72250

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

    Django 关系字段 本文主要内容是关于Django框架中models知识小结 #1 环境 Python3.7.3 Django==2.0.7 #2 字段 #2.1 一对多(ForeignKey)...models.IntegerField() rating = models.IntegerField() def __str__(self): return self.headline #2.1 参数...models.ForeignKey(to,on_delete,** options) # to : 关联类(必填) # on_delete : 与"关联表"关系(必填) #2.2 自关联 models.ForeignKey...(to='self', on_delete=models.CASCADE) #2.3 关联关系 on_delete=None, # 删除关联表中数据时,当前表与其关联field...与之关联值设置为可执行对象返回值,设置:models.SET(可执行对象) #2.4 数据库表示 在生成数据库时,Django追加"_id"字段名称来创建其数据库列名,可以通过指定显式更改此内容db_column

    77920

    python测试开发django-rest-framework-93.联合唯一校验

    但是同一个人针对同一个商品,只能收藏一次,于是可以用UniqueTogetherValidator联合唯一校验 收藏商品 添加商品和收藏商品 models.py 模型设计 from django.db...import models from django.contrib.auth.models import User # Create your models here. # 作者-上海悠悠 QQ交流群:...self.goods_code class UserCollect(models.Model): """用户收藏商品""" user = models.ForeignKey(User, on_delete...=models.CASCADE, verbose_name="用户id") goods = models.ForeignKey(Goods, on_delete=models.CASCADE,...它具有两个必需参数和一个可选messages参数: queryset 必需-这是应针对其强制执行唯一性查询集。 fields 必填-字段名称列表或元组,应组成唯一集合。

    92730

    完美解决Django2.0中models下ForeignKey()问题

    Django2.0中编写models类下ForeignKey book = models.ForeignKey(‘BookInfo’) django2.0与之前1.8不同, 错误: book...= models.ForeignKey(‘BookInfo’) TypeError: __init__() missing 1 required positional argument: ‘on_delete...’ 解决方法: book = models.ForeignKey(‘BookInfo’, on_delete=models.CASCADE,) 加上on_delete参数就可以了!!!...补充知识:Django ForeignKey ondelete CASCADE:删除一并删除关联表下所有的信息; PROTECT:删除信息时,采取保护机制,抛出错误:即不删除关联表内容; SET_NULL...以上这篇完美解决Django2.0中models下ForeignKey()问题就是小编分享给大家全部内容了,希望能给大家一个参考。

    82910

    Django ORM (一) 创建数据库

    #CharField 要求必须有一个参数 maxlength, 用于从数据库层和Django校验层限制该字段所允许最大字符数. (2) IntegerField #用于保存一个整数....#它有两个可选参数:height_field和width_field, # 如果提供这两个参数,则图片将按提供高度和宽度规格保存....upload_to 选项,以告诉 Django # 使用 MEDIA_ROOT 哪个子目录保存上传文件.你数据库中要保存只是文件路径(相对于 MEDIA_ROOT)...# 参数 描述 # path 必需参数. 一个目录绝对文件系统路径. FilePathField 据此得到可选项目....Field重要参数 (1) null : 数据库中字段是否可以为空 (2) blank: django Admin 中添加数据时是否可允许空值 (3) default:设定缺省值 (4) editable

    1.4K10

    基于Django OneToOneField和ForeignKey区别详解

    对于每个ForeignKey,我们需要给出关联模型和on_delete响应选项,即 manufacturer = models.ForeignKey( 'Manufacturer', on_delete...', on_delete=models.CASCADE) class Meta: abstract = True ForeignKey还有如下参数可以选择: 参数 功能 limit_choices_to...ManyToManyField类有两个经常使用参数:through和through_fields,通过这两个参数可以十分方便地建立中间项关联,如示例代码所示: from django.db import...ManyToManyField还有以下参数可以选择: 参数 功能 related_name 同ForeignKey,可以指定关联类在本类中名称 related_query_name 同ForeignKey..., on_delete=models.CASCADE, related_name='supervisor_of', ) OneToOneField既包含ForeignKey中参数,又包含一个额外参数

    2.5K20

    Python Django开发 异常及其解决办法(一)

    ,当前model是修改过,原来migrations已经被删除,但是,重新生成migrations使用递增整数记名,所以,在django_migrations表中0001,0002等前面几个数字文件都已被记录...: (1193, "Unknown system variable 'storeage_engine'") 即storage_engine参数错误,需要改为default_storage_engine,...这可能是因为所定义某个模型定义了外键,而在新版Django中外键必须指定on_delete属性,例如user = models.ForeignKey(User, verbose_name='用户',...on_delete=models.SET_NULL)此时是因为该属性指定为models.SET_NULL,即在父模型删除数据后,对应子模型记录字段设为空,但是在定义该字段时并未允许该字段为空,因此解决方法有两种...' 这是因为django3及以上版本中已经没有six插件,可以将django降到2版本,也可以将安装six.py复制到django/utils目录下,操作如下: ?

    3.2K20

    django 2.x版本中models.ForeignKey()外键说明介绍

    表示外健关联主键 3、on_delete有多个选项 在django2.0后,定义外键和一对一关系时候需要加on_delete选项,此参数为了避免两个表里数据不一致问题,不然会报错: TypeError...) –在老版本这个参数(models.CASCADE)是默认值 owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) –在老版本这个参数...(models.CASCADE)是默认值 参数说明: on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择值 CASCADE:此值设置...当我们查询一个组有那些用户时候,就会用到当前外健, 创建记录 并且,在class中定义了foreignKey之后,group还不存在同时,user表也因为约束原因,不能被进行创建 删除记录 并且...’ 解决办法: owner = models.ForeignKey(User, on_delete=models.CASCADE) 以上这篇对django 2.x版本中models.ForeignKey

    1.2K20

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

    那么不使用外键约束情况下使用 Django ORM 如何实现关联查询两个表呢?这曾是困扰我很久一个问题,今天终于找到了答案,写出来分享一下。...Django ForeignKey 和数据库 FOREIGN KEY 并不一样。...Django ForeignKey 是一种逻辑上两个表关联关系,可以指定是否使用数据库 FOREIGN KEY 约束。...on_delete 参数默认为 on_delete=models.CASCADE,表示使用数据库级联删除,使用 on_delete=models.SET_NULL 可以使删除 Province 时将关联...`name` = xxx; 补充知识:关于Django模型中中定义auto_now=True 数据库中时间并没有自动更新 djangoorm关于更新数据库方法有update和save两种方法

    2.6K10

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

    必填参数primary_key=True,则成为数据库主键,无该字段时,django自动创建,一个model不能有两个该字段。...# 要关联表中字段名称 on_delete=None # 当删除关联表中数据时,当前表与其关联行为 - models.CASCADE...=models.CASCADE) p=models.ForeignKey(people,on_delete=models.CASCADE) dt=models.Datefield() 所有参数如下...: OneToOneField() to # 要进行关联表名 to_field=None # 要关联表中字段名称 on_delete...=None # 当删除关联表中数据时,当前表与其关联行为 五、管理员登陆 为了能让大家提前看到django数据操作,django内置了一款非常到位系统管理员登陆设计系统,首先我们创建下用户

    2.1K00

    django 外键引用自身和on_delete参数

    = models.ForeignKey('self',on_delete=models.CASCADE) on_delete参数如下: CASCADE:级联操作。...如果外键对应那条数据被删除了,那么这条数据也会被删除。 PROTECT:受保护。即只要这条数据引用了外键那条数据,那么就不能删除外键那条数据。如果我们强行删除,Django就会报错。...注意:以上配置都是django级别的,在数据库中级别依旧是RESTRICT 数据库层面的约束有: RESTRICT:默认选项,如果想要删除父表记录时,而在子表中有关联该父表记录,则不允许删除父表中记录...、update时候,子表会将关联记录外键字段所在列设为null,所以注意在设计子表时外键不能设为not null; 为什么在django中可以是用不同约束去操作数据库呢。...比如 djangoon_delete=CASCADE, 但是数据库外键约束是RESTRICT.

    1.3K20
    领券