今天在使用Django创建模型类的时候,出现了如下问题
一、
-
在模型类里面创建外键,并生成迁移文件后,报了下面的错:
hbook = models.ForeignKey('BookInfo') #关系属性,建立一类和多类之间的关系
TypeError: __init__() missing 1 required positional argument: 'on_delete'
-
原因:
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
-
解决方法:
hbook=models.ForeignKey('BookInfo',on_delete=models.CASCADE,)
即在外键值的后面加上 on_delete=models.CASCADE
二、
-
在解决了上述问题后,重新执行迁移文件,还是报错:
You are trying to add a non-nullable field 'hbook' to heroinfo without a default; we can't do that (the database needs something to populate existing rows).
-
原因:
提示我ForeignKey必须有一个default值。但是django里面没有要求ForeignKey必须有一个默认值。
原来旧的数据库文件和现在执行的操作有冲突。
-
解决方法:
把migrations文件夹内除了init.py以外的文件删除,重新执行makemigrations就可以了。
完成!
网友评论