我正在用django编写应用程序,我需要更改特定模型
永远得救了。即假设我有一个模型A和一个客户想要保存
对该模型的更改 - 我还需要保存更改(仅当客户端
时)将某个字段更改为相同的模型(不是实例)。
我的代码:
@receiver(pre_save, sender=A)
def my_callable(sender, instance, **kwargs):
a = A.objects.filter(b=True).all()
for my_a in a:
my_a.b= False
my_a.save()
我对该代码有2个问题:
和想法?
答案 0 :(得分:1)
在查询集上使用.update(b=False)
:
@receiver(pre_save, sender=A)
def my_callable(sender, instance, **kwargs):
A.objects.filter(b=True).update(b=False)
更新在SQL中完成,不会调用模型的save()
方法或触发任何信号
答案 1 :(得分:0)
假设您能够使用Django1.8,这个确切的用例实际上包含在文档中:https://docs.djangoproject.com/en/1.8/ref/models/instances/#customizing-model-loading
Cliff说明:使用from_db方法自定义模型的加载,并在加载时保存实例属性的副本,然后在保存之前对它们进行比较。
如果要将表单数据与模型实例进行比较以查看用户是否正在更改它,请在视图中执行此操作,而不是使用信号。