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;", # 取消外键检查 } } }
问题解决!!!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。