【问题标题】:django, property update a model instancedjango,属性更新模型实例
【发布时间】:2015-12-19 14:45:49
【问题描述】:
1. instance.save()

2. instance.foo = foo; instance.save(update_fields=['foo'])

3. InstanceClass.objects.filter(id=instance.id).update(foo=foo)

我发现 #3 有时并不可靠。
在我运行 #3 之后,偶尔 foo 没有正确设置(未提交?)

当我不想运行信号处理程序时,我曾经使用 #3。

什么时候使用以上 3 个?

【问题讨论】:

    标签: python django django-models django-queryset


    【解决方案1】:

    如果你只是更新一条记录,不需要对模型对象做任何事情,最有效的方法是调用update(),而不是将模型对象加载到内存中。例如,不要这样做:

    instance = Entry.objects.get(id=10)
    instance.comments_on = False
    instance.save()
    

    这样做:

    Entry.objects.filter(id=10).update(comments_on=False)
    

    注意:

    1. 使用update() 还可以防止在加载对象和调用save().*之间的短时间内数据库中的某些内容可能发生变化的竞争条件。
    2. update() 在 SQL 级别进行更新,因此不会调用任何 save(),因此如果您有一个覆盖的 save() 方法,则必须使用第一种方法和 get()save()

    查看Queryset 文档,这里都有解释。

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2014-09-27
      • 2016-02-15
      • 2013-11-08
      • 2019-03-24
      • 2018-04-26
      相关资源
      最近更新 更多