1. 程式人生 > >django on_delete屬性

django on_delete屬性

null str 包含 __init__ 存在 required UNC 子類 信號

今天在給stdent創建class外鍵時發生了error

TypeError: __init__() missing 1 required positional argument: on_delete

原碼:

stu_Class=models.ForeignKey(to="Class",to_field="nid")

錯誤原因:

在Django2.0後,定義外鍵和一對一關系的時候需要加on_delete選項,他是它將是Django 2.0中的必需參數。

修改後代碼:

    stu_Class = models.ForeignKey(to="Class", to_field="
nid", on_delete=models.CASCADE)

Django官方文檔對on_delete參數的解釋

  • CASCADE

    級聯刪除。Django模擬SQL約束ON DELETE CASCADE的行為,並刪除包含ForeignKey的對象。

    Model.delete()不會在相關模型上調用,但 會為所有已刪除的對象發送pre_deletepost_delete信號。

  • PROTECT

    通過引發ProtectedError子類來 防止刪除引用的對象 django.db.IntegrityError

  • SET_NULL

    設置ForeignKeynull; 這是如果只可能 null

    True

  • SET_DEFAULT

    ForeignKey設置為默認值; ForeignKey必須設置的默認值

  • SET()

    設置ForeignKey傳遞給的值 SET(),或者如果傳入了callable,則調用它的結果。在大多數情況下,為了避免在導入models.py時執行查詢,必須傳遞callable:

CASCADE:刪除引用的對象時,也刪除引用它的對象(例如,當您刪除博客文章時,您可能也想刪除註釋)。SQL等價物:CASCADE

PROTECT:禁止刪除引用的對象。要刪除它,您必須刪除手動引用它的所有對象。SQL等價物:RESTRICT

SET_NULL:將引用設置為NULL(要求字段可以為空)。例如,當您刪除用戶時,您可能希望保留他在博客帖子上發布的評論,但是說它是由匿名(或已刪除)用戶發布的。SQL等價物:SET NULL

SET_DEFAULT:設置默認值。SQL等價物:SET DEFAULT

SET(...):設置給定值。這個不是SQL標準的一部分,完全由Django處理。

DO_NOTHING:可能是一個非常糟糕的主意,因為這會在數據庫中創建完整性問題(引用實際上不存在的對象)。SQL等價物:NO ACTION



django on_delete屬性