Django .update 不会调用重写的 save 吗?
我正在尝试在模型中调用这个重写的保存方法:
def save(self, *args, **kwargs):
if self.done is True:
if self.averagepa is None:
pass
elif self.averagepa < 26:
self.links = 5
elif self.averagepa < 31:
self.links = 10
elif self.averagepa < 36:
self.links = 15
elif self.averagepa < 41:
self.links = 20
else:
self.links = 99
super(KW, self).save(*args, **kwargs)
如果我只是通过管理面板保存模型,这个方法运行得很好。但是当我尝试通过 ./manage.py shell
这样更新它时:
KW.objects.filter(id=138).update()
这个方法就没有被触发。请问我该如何在命令行中更新时调用这个重写的保存方法呢?
相关文章:
- 暂无相关问题
1 个回答
17
这是关于 update()
方法的 官方说明。
要注意的是,
update()
方法会直接转换成 SQL 语句。这是一种批量操作,用于直接更新数据。它不会在你的模型上运行任何save()
方法,也不会触发save()
方法相关的前后信号(这些信号是调用save()
时产生的),也不会考虑auto_now
字段选项。如果你想保存 QuerySet 中的每一项,并确保每个实例都调用了save()
方法,你不需要任何特别的函数来处理这个。只需遍历它们并调用save()
即可。
在你的情况下:
kw = KW.objects.get(id=138)
# update kw
kw.save()