我将信号用于在删除,保存,更新等对象时应始终执行的操作。但是,有时候我不想调用我的保存信号,所以我使用
Model.objects.filter(id=instance.id).update(field=value)
而不是实例的保存方法:
instance.save()
在删除对象的情况下,有时候我不想调用删除信号,但我还没有找到避免调用它们的方法。有办法吗?
更新
我正在使用django 1.6.2并调用这样的删除方法:
Model.objects.filter(id=instance.id).delete()
仍然仍然调用删除信号。
答案 0 :(得分:0)
你可以这样做。
Model.objects.filter(id=instance.id).delete()
答案 1 :(得分:0)
不安全和无证方式可能会在不同版本之间发生变化,也可能导致难以调试的意外后果。
这是一个可能你不想使用的黑客,但......它是可能的。
qs = Model.objects.filter(id=instance.id)
qs.order_by().select_related(None)._raw_delete(qs.db)
如果你有任何相关的对象,它可能会因数据库错误而失败,因为Django不会自动删除记录
答案 2 :(得分:0)
在您不希望调用信号的位置,您必须断开它们,运行代码然后重新连接它们。你可以看看如何在FactoryBoy中实现mute_signal装饰器或者只是使用(但它主要用于django测试)
答案 3 :(得分:0)
尝试使用原始 SQL,不要抗拒它。它始终是您可以使用的强大终极武器。
from django.db import connection
with connection.cursor() as cursor:
cursor.execute(f'DELETE from tbl_model where id={instance.id}')