Django 删除而不调用信号

tze*_*man 4 django django-signals django-models

我使用信号来处理对象被删除、保存、更新等时应该始终完成的事情。但是,有时我不想调用保存信号,所以我使用

Model.objects.filter(id=instance.id).update(field=value)

而不是实例的 save 方法:

instance.save()

在删除对象的情况下,有时我不想调用删除信号,但我还没有找到避免调用它们的方法。有办法吗??

更新:

我正在使用 django 1.6.2 并像这样调用删除方法:

Model.objects.filter(id=instance.id).delete()

查询集上仍然调用删除信号。

VSt*_*kov 5

存在不安全且未记录的方式,可能会在版本之间发生变化,并且还可能导致难以调试的意外后果

这是一个你可能不想使用的技巧,但是......这是可能的。

qs = Model.objects.filter(id=instance.id)
qs.order_by().select_related(None)._raw_delete(qs.db)
Run Code Online (Sandbox Code Playgroud)

如果您有任何与此相关的对象,它可能会因数据库错误而失败,因为 Django 不会自动删除记录