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是自己定义的端口),但是运行结果出错。
TypeError: __init__() missing 1 required positional argument: 'on_delete'
百度结果修改外键那句程序,修改成

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此命令即可。(运行成功后,不要在命令提示符里关闭,否则在浏览器里打不开)
TypeError: __init__() missing 1 required positional argument: 'on_delete'
在浏览器窗口里打开上面这个网址,就可以看见运行成功了。
TypeError: __init__() missing 1 required positional argument: 'on_delete'