今天在使用Django創(chuàng)建模型類的時候,出現(xiàn)了如下問題
一、
-
在模型類里面創(chuàng)建外鍵,并生成遷移文件后,報了下面的錯:
hbook = models.ForeignKey('BookInfo') #關(guān)系屬性,建立一類和多類之間的關(guān)系
TypeError: __init__() missing 1 required positional argument: 'on_delete'
-
原因:
在django2.0后,定義外鍵和一對一關(guān)系的時候需要加on_delete選項,此參數(shù)為了避免兩個表里的數(shù)據(jù)不一致問題,不然會報錯:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
-
解決方法:
hbook=models.ForeignKey('BookInfo',on_delete=models.CASCADE,)
即在外鍵值的后面加上 on_delete=models.CASCADE
二、
-
在解決了上述問題后,重新執(zhí)行遷移文件,還是報錯:
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必須有一個默認(rèn)值。
原來舊的數(shù)據(jù)庫文件和現(xiàn)在執(zhí)行的操作有沖突。
-
解決方法:
把migrations文件夾內(nèi)除了init.py以外的文件刪除,重新執(zhí)行makemigrations就可以了。
完成!