如何解决Django创建数据库和添加用户时出现的错误问题?

2026-05-16 16:071阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计559个文字,预计阅读时间需要3分钟。

如何解决Django创建数据库和添加用户时出现的错误问题?

在Django中创建数据库表时遇到错误:`__init__` missing 1 required positional argument: 'on_delete'的原因是,从Django 2.0开始,定义外键和一对一关系时必须指定`on_delete`选项。这个参数决定了当关联的表中的记录被删除时,应该如何处理外键关联的记录。以下是修改后的代码示例:

pythonfrom django.db import models

class Author(models.Model): name=models.CharField(max_length=100)

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

Django生成数据库表时报错 __init__() missing 1 required positional argument: 'on_delete'

原因:

  在django2.0后,定义外键和一对一关系的时候需要加上on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错

例如:

  owner=models.ForeignKey(UserProfile)--->报错

  owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值

参数说明:

  on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选的值

    CASCADE:级联删除。

    PROTECT:报完整性错误。

    SET_NULL:将外键设置为null,前提是允许为null。

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

    SET():调用外面的值,可以是一个函数

    注:一般使用CASCADE就可以了。

在使用Django添加用户时出现报错:

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

如何解决Django创建数据库和添加用户时出现的错误问题?

解决办法,需要在setting.py文件的databases中取消外键检查:

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;", # 取消外键检查 } } }

问题解决!!!

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

本文共计559个文字,预计阅读时间需要3分钟。

如何解决Django创建数据库和添加用户时出现的错误问题?

在Django中创建数据库表时遇到错误:`__init__` missing 1 required positional argument: 'on_delete'的原因是,从Django 2.0开始,定义外键和一对一关系时必须指定`on_delete`选项。这个参数决定了当关联的表中的记录被删除时,应该如何处理外键关联的记录。以下是修改后的代码示例:

pythonfrom django.db import models

class Author(models.Model): name=models.CharField(max_length=100)

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

Django生成数据库表时报错 __init__() missing 1 required positional argument: 'on_delete'

原因:

  在django2.0后,定义外键和一对一关系的时候需要加上on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错

例如:

  owner=models.ForeignKey(UserProfile)--->报错

  owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值

参数说明:

  on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选的值

    CASCADE:级联删除。

    PROTECT:报完整性错误。

    SET_NULL:将外键设置为null,前提是允许为null。

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

    SET():调用外面的值,可以是一个函数

    注:一般使用CASCADE就可以了。

在使用Django添加用户时出现报错:

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

如何解决Django创建数据库和添加用户时出现的错误问题?

解决办法,需要在setting.py文件的databases中取消外键检查:

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;", # 取消外键检查 } } }

问题解决!!!

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