2012-11-14 56 views
0

我有非常标准的save_model()重写,它计算一些值并在结尾调用object.save()是否可以在ModelAdmin.save_model()中使用QuerySet.update()而不是object.save()

我正在重写应用程序以获得更好的可伸缩性,并阅读.save()不是线程安全的并且不允许数据分区。建议的最佳做法是使用update()。我的问题是:如果我在save_model()中执行update()而不是save(),那么可以吗?我没有看到它的任何缺点,是吗?

回答

0

我认为文档中关于updating multiple objects at once的警告是相关的。如果您没有使用任何信号,覆盖模型的保存方法,或使用auto_now字段选项,我无法想象任何其他潜在问题。

请注意,update()方法直接转换为SQL语句。这是直接更新的批量操作。它不会在您的型号上运行任何save()方法,或者发出pre_savepost_save信号(这是调用save()的结果),或者是auto_now字段选项。如果要将每个项目保存在QuerySet中并确保在每个实例上调用save()方法,则不需要任何特殊功能来处理该项目。只需循环他们,并致电save()

+0

感谢您的回答@Alasdair。我没有使用任何信号,我也没有重写模型的save()方法。另外,我将仅基于PK更新一个对象。我会试一试。 –

相关问题