Django在根據models生成數據庫表時報 __init__() missing 1 required positional argument: 'on_delete'


先展示錯誤代碼,code:

 1 from django.db import models
 2 
 3 # Create your models here.
 4 
 5 
 6 class BookInfo(models.Model):
 7     """定義書籍信息模型類"""
 8 
 9     # 設計name屬性
10     name = models.CharField(max_length=10)
11 
12 
13 class PeopleInfo(models.Model):
14     """定義人物信息類"""
15 
16     name = models.CharField(max_length=10)
17     gender = models.BooleanField()
18     book = models.ForeignKey(BookInfo,)

報錯提示:

提示18行的ForeignKey缺少一個位置參數(position argument)---on_delete。

ForeignKey的聲明:

ForeignKey的實現:

 

錯誤的解決辦法,將錯誤代碼后面加上on_delete=models.CASCADE

1 book = models.ForeignKey(BookInfo, on_delete=models.CASCADE,)

從上面外鍵(ForeignKey)和一對一(OneToOneField)來看,都包含有on_delete這個參數。而且Django2.0之后,表與表之間關聯的時候,必須要寫on_delete參數,否則會報異常: 

下面是django官方文檔的說明:

下面介紹以下on_delete的各個參數的值:

 1 on_delete=None,               # 刪除關聯表中的數據時,當前表與其關聯的field的行為
 2 on_delete=models.CASCADE,     # 刪除關聯數據,與之關聯也刪除,級聯刪除。Django模擬SQL約束ON DELETE CASCADE的行為,並刪除包含ForeignKey的對象。
 3 on_delete=models.DO_NOTHING,  # 刪除關聯數據,什么也不做
 4 on_delete=models.PROTECT,     # 刪除關聯數據,引發錯誤ProtectedError。通過引發ProtectedError子類來 防止刪除引用的對象 django.db.IntegrityError
 5 # models.ForeignKey('關聯表', on_delete=models.SET_NULL, blank=True, null=True)
 6 on_delete=models.SET_NULL,    # 刪除關聯數據,與之關聯的值設置為null(前提FK字段需要設置為可空,一對一同理)
 7 # models.ForeignKey('關聯表', on_delete=models.SET_DEFAULT, default='默認值')
 8 on_delete=models.SET_DEFAULT, # 刪除關聯數據,與之關聯的值設置為默認值(前提FK字段需要設置默認值,一對一同理)
 9 on_delete=models.SET,         # 刪除關聯數據,自定義一個值。
10  a. 與之關聯的值設置為指定值,設置:models.SET(值)
11  b. 與之關聯的值設置為可執行對象的返回值,設置:models.SET(可執行對象)

 可參考官方文檔的說明:https://docs.djangoproject.com/zh-hans/2.1/ref/models/fields/#django.db.models.ForeignKey.on_delete

同時感謝以下兩位博主的文章:https://blog.csdn.net/kuangshp128/article/details/78946316

              https://www.cnblogs.com/phyger/p/8035253.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM