当前位置: 芃睿知识网 > 建站常见问题

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

时间:2021年10月24日 16:13   作者:知识网   出处:cnblog

code:


 1 #encoding=utf-8
 2 from django.db import models
 3 # Create your models here.
 4 class BookInfo(models.Model):   #创建书本信息类,继承models.Model
 5     booktitle=models.CharField(max_length=20)
 6     bookdata=models.DateField()
 7 class HeroInfo(models.Model):   #创建英雄信息类
 8     heroname=models.CharField(max_length=10)
 9     herosex=models.BooleanField()
10     herocontent=models.CharField(max_length=50)
11     herobook=models.ForeignKey('BookInfo')   #引用外键,即BookInfo对象

RX:

django生成数据表时报错

解决办法:

将第十一行的代码改为:

herobook=models.ForeignKey('BookInfo',on_delete=models.CASCADE)
即在外键值的后面加上 on_delete=models.CASCADE

 原因:

在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
举例说明:
user=models.OneToOneField(User)
owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本这个参数(models.CASCADE)是默认值
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 models 数据库数据类型有哪些
Django models 数据库数据类型有哪些

CharField如果是巨大的文本类型,可以用 TextField,该字段默认的表单样式是 TextInput,Char

django RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
django RuntimeError: 'cryptography' package is req

出现错误:RuntimeError: 'cryptography' package is required for sh

django (1045, "Access denied for user 'root'@'localhost' (using password:password: YES/NO)")
django (1045, "Access denied for user 'root'@'loca

在django的根目录下运行程序 python manage.py runserer或者运行python3 manage

django (2003, "Can't connect to MySQL server on 'localhost' ([Errno 61] Connection refused)
django (2003, "Can't connect to MySQL server on 'l

逐一排查问题,出现2003, "Can't connect to MySQL server on 'localhost'

在django admin中修改字段中文名的两种方式
在django admin中修改字段中文名的两种方式

使用django admin显示列表的时候默认会显示字段的名字,一般为英文,我们最好在定义的时候就将英文修改为自定义中文

Django如何把数据库里的html格式输出到前端
Django如何把数据库里的html格式输出到前端

只需在HTML页面中加入{% autoescape off %}即可!

django中autoescape标签使用详解
django中autoescape标签使用详解

DTL(Django Template Language)模板中默认已经开启了自动转义,会将那些特殊字符串进行转义

Django报错HTTP status code must be an integer.
Django报错HTTP status code must be an integer.

刚刚出现这个问题,还以为是表单提交或者什么网络错误,改了render就正常了

django模型如何删除数据
django模型如何删除数据

django模型也包含增删改查,那么django模型如何删除数据呢,下面我们一起看看

django自定义404页面有什么用
django自定义404页面有什么用

django自定义404页面有什么用呢,当网站改版时,ULR经常会出现变动

发表高见 (请对您的言行负责)
2021年10月24日 16:14,回答 by_淘气宝宝:
很详细,非常棒,CASCADE:此值设置,是级联删除。
2021年10月24日 16:26,回答 by_淘气宝宝:
老的教程没有这一个值,所以都会报错,幸好看到了这个文章,很感谢
©芃睿知识网 版权所有2021-2022 www.shsongjiang.com