您好,登錄后才能下訂單哦!
Django中的模型信號是什么?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
模型信號
django.db.models.signals模塊定義了模型系統發送的一組信號。
pre_init
django.db.models.signals.pre_init
每當您實例化Django模型時,該信號都會在模型的__init__()方法的開頭發送。
帶有此信號的參數:
sender:剛創建了一個實例的模型類。
ARGS:傳遞給__init__()的位置參數列表:
kwargs:傳遞給__init__()的關鍵字參數的字典:
例如:
from app01 import models p = models.Publisher(name='沙河出版社')
發送到pre_init處理程序的參數將是:
pre_save
django.db.models.signals.pre_save
這是在模型的save()方法的開頭發送的。
帶有此信號的參數:
sender:模型類。
instance:正在保存的實際實例。
raw:一個布爾值True如果模型按照顯示的方式保存(即當加載固定裝置時)。不應該查詢/修改數據庫中的其他記錄,因為數據庫可能尚未處于一致狀態。
using:正在使用的數據庫別名。
update_fields:如果有字段被傳遞給Model.save()方法那么就是所傳遞的字段集,否則就是None。
post_save
django.db.models.signals.post_save
像pre_save一樣,但是在save()方法的末尾發送。
帶有此信號的參數:
sender:模型類。
instance:正在保存的實際實例。
created:一個布爾值True如果創建了新記錄。
raw:一個布爾值True如果模型按照顯示的方式保存(即當加載固定裝置時)。 不應該查詢/修改數據庫中的其他記錄,因為數據庫可能尚未處于一致狀態。
using:正在使用的數據庫別名。
update_fields:如果有字段被傳遞給Model.save()方法那么就是所傳遞的字段集,否則就是None。
pre_delete
django.db.models.signals.pre_delete
在模型的delete()方法和queryset的delete()方法的開頭發送。
帶有此信號的參數:
sender:模型類。
instance:正在刪除的實際實例。
using:正在使用的數據庫別名。
post_delete
django.db.models.signals.post_delete
像pre_delete一樣,但是在模型的delete()方法和queryset的delete()方法的末尾發送。
帶有此信號的參數:
sender:模型類。
instance:正在刪除的實際實例。
請注意,該對象將不再位于數據庫中,所以要非常小心使用此實例。
using:正在使用的數據庫別名。
m2m_changed
django.db.models.signals.m2m_changed
在模型實例上更改了ManyToManyField時發送。 嚴格來說,這不是一個模型信號,因為它是由ManyToManyField發送的,但由于它補充了pre_save / post_save和pre_delete / post_delete當跟蹤模型的更改時,它包括在這里。
帶有此信號的參數:
sender:描述ManyToManyField的中間模型類。 當定義多對多字段時,此類自動創建;您可以使用多對多字段上的through屬性訪問它。
instance:多對多關系更新的實例。 這可以是sender或ManyToManyField相關的類的一個實例。
action:指示在關系上完成的更新類型的字符串。 這可以是以下之一:
“pre_add”:在之前發送一個或多個對象被添加到關系中。
“post_add”:在之后發送一個或多個對象被添加到關系中。
“pre_remove”:在之前發送一個或多個對象從關系中刪除。
“post_remove”:在之后發送一個或多個對象從關系中刪除。
“pre_clear”:在之前發送關系被清除。
“post_clear”:之后發送關系被清除。
reverse:指示關系的哪一側被更新(即,如果它是正在被修改的正向或反向關系)。
model:添加到,從關系中刪除或從關系中清除的對象的類。
pk_set:對于pre_add,post_add,pre_remove和post_remove操作,這是一組主鍵值加入或從關系中刪除。
對于pre_clear和post_clear操作,這是None。
using:正在使用的數據庫別名。
class_prepared
django.db.models.signals.class_prepared
每當模型類“準備”時發送 - 即,一旦模型已經被定義并在Django的模型系統中注冊。 Django內部使用這個信號;它通常不會用于第三方應用程序。
由于此信號是在應用程序注冊表群集進程期間發送的,并且在應用注冊表完全填充后運行AppConfig.ready(),因此無法使用該方法連接接收器。 一種可能性是連接他們AppConfig.__init__(),注意不要導入模型或觸發對應用程序注冊表的調用。
使用此信號發送的參數:
sender:ready的model類。
看完上述內容,你們掌握Django中的模型信號是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。