gpt4 book ai didi

django - 在 Django 中使用 QuerySet.update() 与 ModelInstance.save()

转载 作者:行者123 更新时间:2023-12-04 22:37:00 25 4
gpt4 key购买 nike

我很好奇其他人对这个问题的看法......

在过去的几天里,我一直在反复讨论使用 QuerySet.update()ModelInstance.save() 。显然,如果有很多字段被更改,我会使用 save() ,但对于更新几个字段,我认为最好使用 QuerySet.update() 。使用 QuerySet.update() 的好处是你可以让多个线程同时运行 update(),在同一个对象的不同字段上,你不会有竞争问题。默认的 save() 方法保存所有字段,因此来自两个线程的并行 save() 会出现问题。

那么问题是如果您重载了自定义 save() 方法会怎样。我能想到的最好方法是将自定义 save() 方法中的任何内容抽象为单独的更新程序方法,这些方法实际上使用 QuerySet.update() 来设置模型中的几个字段。有人用过这个模式吗?

有点令人恼火的是,在 Django Admin 中,即使在更改列表模式下编辑(您只编辑一个字段),整个模型也会被保存。这基本上意味着,如果有人在他/她的浏览器上打开了一个更改列表,而系统中的其他一些字段被更新,则当该用户保存更改列表中的更改时,该更新的值将被丢弃。这个问题有解决方案吗?

想法?

谢谢。

最佳答案

使用 QuerySet.update() 的主要原因是你可以通过一个数据库查询更新多个对象,而每次调用对象的 save 方法都会命中数据库!

另一点值得一提的是,django 的 pre_savepost_save 信号仅在您调用对象的 save 方法时发送,而不是在 QuerySet.update() 上发送。

谈到您描述的冲突问题,我认为如果您点击“保存”,然后您必须发现有些值与您更改时相同,但有些您保持不变的值已更改?! ?当然,您可以将管理员的 save_model 或对象的 save 方法修改为您建议的行为。

关于django - 在 Django 中使用 QuerySet.update() 与 ModelInstance.save(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4519336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com