django改变数据库

时间:2015-07-14 07:54:26

标签: python django

我正在用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个问题:

  1. 它有一个无限递归
  2. 我不知道如何检查哪个字段已更改
  3. 和想法?

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()方法或触发任何信号

.update() docs

答案 1 :(得分:0)

假设您能够使用Django1.8,这个确切的用例实际上包含在文档中:https://docs.djangoproject.com/en/1.8/ref/models/instances/#customizing-model-loading

Cliff说明:使用from_db方法自定义模型的加载,并在加载时保存实例属性的副本,然后在保存之前对它们进行比较。

如果要将表单数据与模型实例进行比较以查看用户是否正在更改它,请在视图中执行此操作,而不是使用信号。