Django4.0 執(zhí)行查詢-刪除對象

2022-03-16 17:33 更新

通常,刪除方法被命名為 ?delete()?。該方法立刻刪除對象,并返回被刪除的對象數(shù)量和一個包含了每個被刪除對象類型的數(shù)量的字典。例如:

>>> e.delete()
(1, {'blog.Entry': 1})

你也能批量刪除對象。所有 ?QuerySet ?都有個 ?delete()? 方法,它會刪除 ?QuerySet ?中的所有成員。
例如,這會刪除 2005 發(fā)布的所有 ?Entry ?對象:

>>> Entry.objects.filter(pub_date__year=2005).delete()
(5, {'webapp.Entry': 5})

請記住,只要有機會的話,這會通過純 SQL 語句執(zhí)行,所以就無需在過程中調用每個對象的刪除方法了。若你為模型類提供了自定義的 ?delete()? 方法,且希望確保調用了該方法,你需要手動刪除該模型的實例(例如,如遍歷 ?QuerySet?,在每個對象上分別調用 ?delete() ?方法),而不是使用 ?QuerySet ?的批量刪除方法? delete()?。
當 Django 刪除某個對象時,默認會模仿 SQL 約束 ?ON DELETE CASCADE? 的行為——換而言之,某個對象被刪除時,關聯(lián)對象也會被刪除。例子:

b = Blog.objects.get(pk=1)
# This will delete the Blog and all of its Entry objects.
b.delete()

這種約束行為由 ?ForeignKey ?的 ?on_delete ?參數(shù)指定。
注意 ?delete()? 是唯一未在 ?Manager ?上暴漏的 ?QuerySet ?方法。這是一種安全機制,避免你不小心調用了 ?Entry.objects.delete()?,刪除了所有的條目。若你確實想要刪除所有對象,你必須顯示請求完整結果集合:

Entry.objects.all().delete()


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號