网络编程
位置:首页>> 网络编程>> 数据库>> Django生成数据库及添加用户报错解决方案

Django生成数据库及添加用户报错解决方案

作者:陈彦斌  发布时间:2024-01-28 22:40:00 

标签:Django,数据库,用户,报错,解决

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

解决办法,需要在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;", # 取消外键检查
    }
  }
}

问题解决!!!

来源:https://www.cnblogs.com/chenyanbin/p/10630875.html

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com