假设我有一些Django模型,并且正在更新一个实例

def modify_thing(id, new_blah):
    mything = MyModel.objects.get(pk=id)
    mything.blah = new_blah
    mything.save()


我的问题是,如果碰巧是mything.blah == new_blah的情况,django是否以某种方式知道这一点,而又不想再次保存此[non-]修改?还是会始终进入数据库(在我的情况下为MySQL)并更新数据?

如果我想避免不必要的写操作,那么执行以下操作是否有意义:

if mything.blah != new_blah:
    mything.blah = new_blah
    mything.save()


假设无论如何都要从db读取记录,以便首先进行比较?从这种构造中可以获得任何效率-如果是的话,是否有比使用python中的if语句更丑陋的方法呢?

最佳答案

您可以使用Django Signals来确保您刚刚发布的代码不会写入数据库。看一下pre_save,这就是您要寻找的信号。

09-05 12:39