我有非常标准的save_model()覆盖,它会计算一些值,最后调用object.save()
我正在重写应用程序以获得更好的可伸缩性,并且读取.save()不是线程安全的,并且不允许数据分区。建议的最佳做法是使用update()。
我的问题是:如果我在save_model()中执行update()而不是save(),这样可以吗?我没有看到它的任何缺点,对吗?
答案 0 :(得分:0)
我认为有关updating multiple objects at once的文档中的警告是相关的。如果你没有使用任何信号,覆盖模型的保存方法,或使用auto_now
字段选项,我就不会想到任何其他潜在的问题。
请注意,
update()
方法直接转换为SQL语句。这是直接更新的批量操作。它不会在您的模型上运行任何save()
方法,也不会发出pre_save
或post_save
信号(这是调用save()
的结果),或尊重{{ 1}}字段选项。如果要保存auto_now
中的每个项目并确保在每个实例上调用QuerySet
方法,则不需要任何特殊功能来处理它。只需循环遍历它们并拨打save()
: