如何理解Django官方文档中的以下陈述?
请记住,只要有可能,这将完全在SQL中执行,因此在此过程中不一定会调用单个对象实例的
delete()
方法。如果您在模型类上提供了自定义delete()
方法并希望确保调用它,则需要“手动”删除该模型的实例(例如,通过迭代QuerySet并调用{{ 1}}分别在每个对象上)而不是使用QuerySet的批量delete()
方法。
在大多数情况下,我们仍需要在自定义的delete()
函数中调用超类中的原始delete()
函数。为什么由于底层SQL而无法执行delete()
函数的自定义版本?提到批量操作意味着什么?
答案 0 :(得分:0)
如果你打电话给Foo.objects.all().delete()
(一个QuerySet),它就不会工作。
如果你打电话
会工作for foo in Foo.objects.all():
foo.delete()
(个别对象)
答案 1 :(得分:0)
对于名为MyModel
的模型,有两种不同的delete
方法:
MyModel
中的一个,用于每个对象
m = MyModel.objects.first()
m.delete() # here you use the methode defined in MyModel
一个QuerySet,它使用单个SQL一次删除所有对象:
qs = MyModel.objects.filter(...)
qs.delete() # this is the queryset bulk delete
此处delete
的{{1}}方法不会被执行。
该文档说,如果您要删除查询集中的所有对象并仍然调用自定义MyModel
方法,则必须执行以下操作:
MyModel.delete