我试图在模型中调用这个覆盖保存方法:
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()
它不会触发它。如何通过shell更新来调用保存覆盖方法?
答案 0 :(得分:12)
这是update()
方法的documented behaviour。
请注意,
update()
方法直接转换为SQL语句。这是直接更新的批量操作。它不会在模型上运行任何save()
方法,也不会发出pre_save或post_save信号(这是调用save()
的结果),或者遵循auto_now字段选项。如果要保存QuerySet中的每个项目并确保在每个实例上调用save()
方法,则不需要任何特殊功能来处理它。只需循环遍历它们并拨打save()
。
在你的情况下:
kw = KW.objects.get(id=138)
# update kw
kw.save()