欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-09 16:30:01
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;", # 取消外键检查
     }
   }
 }

问题解决!!!

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