假设我有一些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
,这就是您要寻找的信号。