我有非常标准的save_model()重写,它计算一些值并在结尾调用object.save()是否可以在ModelAdmin.save_model()中使用QuerySet.update()而不是object.save()
我正在重写应用程序以获得更好的可伸缩性,并阅读.save()不是线程安全的并且不允许数据分区。建议的最佳做法是使用update()。我的问题是:如果我在save_model()中执行update()而不是save(),那么可以吗?我没有看到它的任何缺点,是吗?
我有非常标准的save_model()重写,它计算一些值并在结尾调用object.save()是否可以在ModelAdmin.save_model()中使用QuerySet.update()而不是object.save()
我正在重写应用程序以获得更好的可伸缩性,并阅读.save()不是线程安全的并且不允许数据分区。建议的最佳做法是使用update()。我的问题是:如果我在save_model()中执行update()而不是save(),那么可以吗?我没有看到它的任何缺点,是吗?
我认为文档中关于updating multiple objects at once的警告是相关的。如果您没有使用任何信号,覆盖模型的保存方法,或使用auto_now
字段选项,我无法想象任何其他潜在问题。
请注意,
update()
方法直接转换为SQL语句。这是直接更新的批量操作。它不会在您的型号上运行任何save()
方法,或者发出pre_save
或post_save
信号(这是调用save()
的结果),或者是auto_now
字段选项。如果要将每个项目保存在QuerySet
中并确保在每个实例上调用save()
方法,则不需要任何特殊功能来处理该项目。只需循环他们,并致电save()
:
感谢您的回答@Alasdair。我没有使用任何信号,我也没有重写模型的save()方法。另外,我将仅基于PK更新一个对象。我会试一试。 –