Django4.0 執(zhí)行查詢(xún)-刪除對(duì)象

2022-03-16 17:33 更新

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

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

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

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

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

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 ?方法。這是一種安全機(jī)制,避免你不小心調(diào)用了 ?Entry.objects.delete()?,刪除了所有的條目。若你確實(shí)想要?jiǎng)h除所有對(duì)象,你必須顯示請(qǐng)求完整結(jié)果集合:

Entry.objects.all().delete()


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)