在ModelAdmin.save_model()中使用QuerySet.update()而不是object.save()是否可以

时间:2012-11-14 14:29:49

标签: python django django-models django-admin

我有非常标准的save_model()覆盖,它会计算一些值,最后调用object.save()

我正在重写应用程序以获得更好的可伸缩性,并且读取.save()不是线程安全的,并且不允许数据分区。建议的最佳做法是使用update()。

我的问题是:如果我在save_model()中执行update()而不是save(),这样可以吗?我没有看到它的任何缺点,对吗?

1 个答案:

答案 0 :(得分:0)

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

  

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