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