当前位置: 移动技术网 > IT编程>脚本编程>Python > Django生成数据库及添加用户报错解决方案

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

2020年10月10日  | 移动技术网IT编程  | 我要评论
django生成数据库表时报错 __init__() missing 1 required positional argument: 'on_delete'原因:  在django2.0后,定义外键和

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

问题解决!!!

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网