codecamp

Django4.0 执行查询-删除对象

通常,删除方法被命名为 ​delete()​。该方法立刻删除对象,并返回被删除的对象数量和一个包含了每个被删除对象类型的数量的字典。例如:

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

你也能批量删除对象。所有 ​QuerySet ​都有个 ​delete()​ 方法,它会删除 ​QuerySet ​中的所有成员。
例如,这会删除 2005 发布的所有 ​Entry ​对象:

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

请记住,只要有机会的话,这会通过纯 SQL 语句执行,所以就无需在过程中调用每个对象的删除方法了。若你为模型类提供了自定义的 ​delete()​ 方法,且希望确保调用了该方法,你需要手动删除该模型的实例(例如,如遍历 ​QuerySet​,在每个对象上分别调用 ​delete() ​方法),而不是使用 ​QuerySet ​的批量删除方法​ delete()​。
当 Django 删除某个对象时,默认会模仿 SQL 约束 ​ON DELETE CASCADE​ 的行为——换而言之,某个对象被删除时,关联对象也会被删除。例子:

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

这种约束行为由 ​ForeignKey ​的 ​on_delete ​参数指定。
注意 ​delete()​ 是唯一未在 ​Manager ​上暴漏的 ​QuerySet ​方法。这是一种安全机制,避免你不小心调用了 ​Entry.objects.delete()​,删除了所有的条目。若你确实想要删除所有对象,你必须显示请求完整结果集合:

Entry.objects.all().delete()


Django4.0 执行查询-比较对象
Django4.0 执行查询-复制模型实例
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }