django on_delete屬性
今天在給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_delete
和post_delete
信號。
PROTECT
-
通過引發
ProtectedError
子類來 防止刪除引用的對象django.db.IntegrityError
。
SET_NULL
-
設置
ForeignKey
null; 這是如果只可能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屬性