TypeError: __init__() missing 1 required positional argument: 'on_delete'
在新建的booktest包里的models.py写入定义的类。
class BookInfo(models.Model):
'''定义书本类'''
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
class HeroInfo(models.Model):
'''定义英雄类'''
hname = models.CharField(max_length=10)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=1000)
# 通过外键和书本进行关联
hbook = models.ForeignKey('BookInfo')
在命令提示符里运行,注意是在test1目录下运行的,运行语句是:python manage.py runserver 8000(8000是自己定义的端口),但是运行结果出错。
百度结果修改外键那句程序,修改成
hbook = models.ForeignKey('BookInfo',on_delete=models.CASCADE,)
因为在在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: init() missing 1 required positional argument: ‘on_delete’。
on_delete 有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值。
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。
一般情况下使用CASCADE就可以了。
然后再运行python manage.py runserver 8000此命令即可。(运行成功后,不要在命令提示符里关闭,否则在浏览器里打不开)
在浏览器窗口里打开上面这个网址,就可以看见运行成功了。