Nem*_* Ga 3 python django django-models
我试图在模型中调用这个覆盖保存方法:
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)
Run Code Online (Sandbox Code Playgroud)
如果我只是在管理面板中保存模型,这非常有效.但是,当我尝试通过./manage.py shell这样更新它:
KW.objects.filter(id=138).update()
Run Code Online (Sandbox Code Playgroud)
它不会触发它.如何通过shell更新调用保存覆盖方法?
Ala*_*air 12
这是该方法的记录行为update().
请注意,该
update()方法直接转换为SQL语句.这是直接更新的批量操作.它不会save()在模型上运行任何方法,也不会发出pre_save或post_save信号(这是调用的结果save()),或者遵循auto_now字段选项.如果要保存QuerySet中的每个项目并确保save()在每个实例上调用该方法,则不需要任何特殊函数来处理它.只需循环它们并打电话save().
在你的情况下:
kw = KW.objects.get(id=138)
# update kw
kw.save()
Run Code Online (Sandbox Code Playgroud)