Django 2.0+ 外键报错及数据库添加用户错误解决方案

远山来客
远山来客
发布时间:2026-10-15| 6人浏览过
原创

本文详解Django 2.0后外键定义必须指定on_delete参数的原因及五种可选值,并解决添加用户时因外键约束导致的IntegrityError错误。通过修改settings.py中DATABASES配置的OPTIONS,设置foreign_key_checks为0即可快速修复该问题。

Django外键on_delete参数报错原因

在使用Django生成数据库表时,可能会遇到报错信息:__init__() missing 1 required positional argument: 'on_delete'。

产生该错误的原因如下:

自Django 2.0版本起,在定义外键(ForeignKey)或一对一关系时,必须显式添加on_delete选项。此参数旨在防止因关联表数据不一致而引发的问题,若未指定则会直接报错。

具体示例对比如下:

错误写法:owner=models.ForeignKey(UserProfile),此写法会触发报错。

正确写法:owner=models.ForeignKey(UserProfile, on_delete=models.CASCADE)。在旧版本Django中,models.CASCADE是默认值,因此无需显式写出;但在新版本中必须显式声明。

关于on_delete参数的详细说明:

on_delete共有五个可选值:CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()。

CASCADE:级联删除。当被引用的对象删除时,当前对象也随之删除。

PROTECT:保护模式。若存在关联记录,删除操作将抛出完整性错误(IntegrityError)。

SET_NULL:将外键字段设置为NULL。此选项要求该外键字段允许为NULL(null=True)。

SET_DEFAULT:将外键字段设置为一个默认值。

SET():调用外部传入的值,该值可以是一个函数。

注:在大多数常规场景下,使用CASCADE即可满足需求。

解决数据库添加用户的外键约束错误

此外,在使用Django添加用户或执行相关数据库操作时,可能会遇到以下报错:

django.db.utils.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`cms`.`app01_book_author`, CONSTRAINT `app01_book_author_book_id_df0ca405_fk_app01_book_id` FOREIGN KEY (`book_id`) REFERENCES `app01_book` (`id`))') [31/Mar/2019 21:20:45] "GET /addbook/ HTTP/1.1" 500 216210

解决办法是在settings.py文件的DATABASES配置中,通过OPTIONS取消外键检查:

1 DATABASES = {


 DATABASES = {
   'default': {
     'ENGINE': 'django.db.backends.mysql',
     'NAME': 'cms', # 你的数据库名称
     'USER': 'root', # 你的数据库用户名
     'PASSWORD': '123456', # 你的数据库密码
     'HOST': '', # 你的数据库主机,留空默认为localhost
     'PORT': '3306', # 你的数据库端口
     'OPTIONS': {
       "init_command": "SET foreign_key_checks = 0;", # 取消外键检查
     }
   }
 }

完成上述配置后,问题即可解决。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。