TypeError: __init__() missing 1 required positional argument: 'on_delete' 解決辦法

Django 中創(chuàng)建Model時報以下錯誤:

TypeError: init() missing 1 required positional argument: ‘on_delete
代碼如下

from django.db import models

# 準備書籍列表信息的模型類
class BookInfo(models.Model):
    name = models.CharField(max_length=10)

class PeopleInfo(models.Model):
    name = models.CharField(max_length=10)
    gender = models.BooleanField()
    ##外鍵約束:人物屬于哪本書
    book = models.ForeignKey(BookInfo,on_delete=models.CASCADE)
# Create your models here.

當執(zhí)行 python manage.py makemigrations 出現(xiàn)錯誤:TypeError: init() missing 1 required positional argument: ‘on_delete’

解決方案:

定義外鍵的時候需要加上 on_delete=;
即:contract = models.ForeignKey(Contract, on_delete=models.CASCADE)

原因

django 升級到2.0之后,表與表之間關聯(lián)的時候,必須要寫on_delete參數,否則會報異常:
TypeError: init() missing 1 required positional argument: ‘on_delete’
on_delete各個參數的含義如下:

    on_delete=None,               # 刪除關聯(lián)表中的數據時,當前表與其關聯(lián)的field的行為
    on_delete=models.CASCADE,     # 刪除關聯(lián)數據,與之關聯(lián)也刪除
    on_delete=models.DO_NOTHING,  # 刪除關聯(lián)數據,什么也不做
    on_delete=models.PROTECT,     # 刪除關聯(lián)數據,引發(fā)錯誤ProtectedError
    # models.ForeignKey('關聯(lián)表', on_delete=models.SET_NULL, blank=True, null=True)
    on_delete=models.SET_NULL,    # 刪除關聯(lián)數據,與之關聯(lián)的值設置為null(前提FK字段需要設置為可空,一對一同理)
    # models.ForeignKey('關聯(lián)表', on_delete=models.SET_DEFAULT, default='默認值')
    on_delete=models.SET_DEFAULT, # 刪除關聯(lián)數據,與之關聯(lián)的值設置為默認值(前提FK字段需要設置默認值,一對一同理)
    on_delete=models.SET,         # 刪除關聯(lián)數據,
     a. 與之關聯(lián)的值設置為指定值,設置:models.SET(值)
     b. 與之關聯(lián)的值設置為可執(zhí)行對象的返回值,設置:models.SET(可執(zhí)行對象)

由于多對多(ManyToManyField)沒有 on_delete 參數,所以以上只針對外鍵(ForeignKey)和一對一(OneToOneField)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容